这里我们只考虑ipv4的情况,ip的格式 AAA.BBB.CCC.DDD。
思路:只要能将ip转化为整数,然后就容易比较了,ip的每一位都是0~255的数字,所以它的进位是256。
AAA处于第4位,那么将第4位转化为整数就是AAA*256*256*256;
BBB处于第3位,那么将第3位转化为整数就是BBB*256*256*256;
CCC处于第2位,那么将第2位转化为整数就是CCC*256*256*256;
DDD处于第1位,那么将第2位转化为整数就是DDD
这里256刚好是2的8次方,所以我们采用效率高的移位操作来运算,也就是下面的方程式:
(AAA << 24) + (BBB << 16) + (CCC << 8) + DDD
现在我们转成java代码的形式如下:
public long toLong(String ipStr) {
String arr = ipStr.split("\\.");
return (Long.valueOf(arr[0]) << 24) + (Long.valueOf(arr[1]) << 16) +
(Long.valueOf(arr[2]) << 8) + Long.valueOf(arr[3]);
}
有了上面的方法,我们就比较容易将ip集合进行排序了,代码如下:
Collections.sort(ipList, new Comparator<String>(){
@Override
public int compare(String ip1, String ip2) {
long ipNum1 = IpUtil.toLong(ip1);
long ipNum2 = IpUtil.toLong(ip2);
if (ipNum1 > ipNum2) {
return 1;
}
if (ipNum1 < ipNum2) {
return -1;
}
return 0;
}
});
如果有其它好的方法,还请留言!!!