import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
class IPV4Clasification {
public final static String CLASS_A = "A";
public final static String CLASS_B = "B";
public final static String CLASS_C = "C";
private Map<String, List<IPV4>> ips;
public IPV4Clasification () {
ips = new HashMap<String, List<IPV4>>();
ips.put(CLASS_A, new ArrayList<IPV4>());
ips.put(CLASS_B, new ArrayList<IPV4>());
ips.put(CLASS_C, new ArrayList<IPV4>());
}
public void addIPV4(IPV4 ip) {
short first = ip.getFirst();
if(0 <= first && first <= 127) {
ips.get(CLASS_A).add(ip);
}else if(128 <= first && first <= 191) {
ips.get(CLASS_B).add(ip);
}else if(192 <= first && first <= 255) {
ips.get(CLASS_C).add(ip);
}
}
public void sortIps() {
Collections.sort(ips.get(CLASS_A));
Collections.sort(ips.get(CLASS_B));
Collections.sort(ips.get(CLASS_C));
}
public void printIps() {
System.out.println("Class A");
printIps(ips.get(CLASS_A));
System.out.println("Class B");
printIps(ips.get(CLASS_B));
System.out.println("Class C");
printIps(ips.get(CLASS_C));
}
public void printIps(List<IPV4> list) {
for(IPV4 ip :list) {
System.out.println(ip);
}
}
}
class IPV4 implements Comparable<IPV4> {
private short first;
private short second;
private short third;
private short four;
private final static String IPV4_SEPARATOR = ".";
public IPV4(String foo) {
if(null==foo) {
throw new IllegalArgumentException("foo is required!");
}
this.setup(foo);
}
private void setup(String foo) {
StringTokenizer tokens = new StringTokenizer(foo, IPV4_SEPARATOR);
this.first = Short.parseShort(tokens.nextToken());
this.second = Short.parseShort(tokens.nextToken());
this.third = Short.parseShort(tokens.nextToken());
this.four = Short.parseShort(tokens.nextToken());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(this.first).append(IPV4_SEPARATOR);
sb.append(this.second).append(IPV4_SEPARATOR);
sb.append(this.third).append(IPV4_SEPARATOR);
sb.append(this.four);
return sb.toString();
}
@Override
public int compareTo(IPV4 o) {
return this.first == o.first ? 0 : this.first > o.first ? 1 : this.first < o.first ? -1 : Integer.MIN_VALUE;
}
public short getFirst() {
return first;
}
public void setFirst(short first) {
this.first = first;
}
public short getSecond() {
return second;
}
public void setSecond(short second) {
this.second = second;
}
public short getThird() {
return third;
}
public void setThird(short third) {
this.third = third;
}
public short getFour() {
return four;
}
public void setFour(short four) {
this.four = four;
}
}
public class Ipv4Test {
public static void main(String[] args) {
IPV4Clasification iPV4Clasification = new IPV4Clasification();
iPV4Clasification.addIPV4(new IPV4("104.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("102.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("105.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("129.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("128.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("255.168.1.1"));
iPV4Clasification.addIPV4(new IPV4("192.168.1.1"));
iPV4Clasification.sortIps();
iPV4Clasification.printIps();
}
}