JAVA对IP进行排序

JAVA 对IP排序
import java.util.*;
public class TestIpSort {
	public static void main(String[] args){
		//System.out.println(Arrays.toString(IP.class.getDeclaredFields()));
		IP ip5=new IP("10.100.0.0","fdfd");
		IP ip6=new IP("10.50.0.0","test");
		//System.out.println(ip5.getIP().compareTo(ip6.getIP()));
		IP ip4=new IP("10.4.120.50","cdf");
		IP ip1=new IP("10.4.120.99","def");
		IP ip2=new IP("10.4.120.101","bbf");
		IP ip3=new IP("10.4.120.100","abc");
		List<IP> list=new ArrayList<IP>();
		list.add(ip1);
		list.add(ip2);
		list.add(ip3);
		list.add(ip4);
		list.add(ip5);
		list.add(ip6);
//		System.out.println("排序前:"+list);
     	Collections.sort(list,IP.IPComparator);
		System.out.println("IP正序:"+list);
//		Collections.sort(list,IP.nameComparator);
//		System.out.println("NAME正序:"+list);
	}
}

class IP {
	IP(String IP,String name){
		this.IP=IP;
		this.name=name;
	}
	//private T sortField;
	private String IP;
	private String name;
	public static Comparator IPComparator=new Comparator(){
		@Override
		public int compare(Object arg0, Object arg1) {
			IP ip1=(IP)arg0;
			IP ip2=(IP)arg1;
			return compartTo(ip1.IP,ip2.IP);
		}		
	};
	public static Comparator nameComparator=new Comparator(){
		@Override
		public int compare(Object arg0, Object arg1) {
			IP ip1=(IP)arg0;
			IP ip2=(IP)arg1;
			return ip1.name.compareTo(ip2.name);
		}
		
	};
	private static long[] parseIp(String ip){
		ip=ip.replace(".", "#");
		long result[]=new long[4];
		String[] ip1=ip.split("#");
		if(ip!=null){
			result[0]=Long.parseLong(ip1[0]);
			result[1]=Long.parseLong(ip1[1]);
			result[2]=Long.parseLong(ip1[2]);
			result[3]=Long.parseLong(ip1[3]);
		}
		return result;
	}
	public static int compartTo(String ip1,String ip2){
        //以下方法不能判断的原因在于:
		例如10.4.120.5与10.50.0.0按理应该前者小,但将它们转化为数字组合后,后者位数少,所以反而变成后面一个数字更小。
//		String ip11=ip1.replace(".","");
//		String ip22=ip2.replace(".", "");
//		return new Long(ip11).compareTo(new Long(ip22));
		//比较2个IP的顺序,按照数字顺序
		long[] ip11=parseIp(ip1);
		long[] ip22=parseIp(ip2);
		long ip1Result=0,ip2Result=0;
		for(int i=0;i<4;i++){
			ip1Result+=(ip11[i]<<(24-i*8));
		}
		for(int i=0;i<4;i++){
			ip2Result+=(ip22[i]<<(24-i*8));
		}
		if(ip1Result-ip2Result>0){
			return 1;
		}else if(ip1Result-ip2Result<0){
			return -1;
		}else{
			return 0;
		}
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString(){
		return this.name+"-"+this.IP;
	}
	public String getIP() {
		return IP;
	}
	public void setIP(String iP) {
		IP = iP;
	}
}

你可能感兴趣的:(java)