Java:检查IP地址是否在数组列表中

时间:2015-05-14 09:22:46

标签: java arraylist

是否有特定的方法来检查arrayList中是否存在IP地址?现在我有一个由IP地址字符串组成的arraylist(例如“192.168.0.4”等)。收到数据包后,我想检查数据包的IP地址是否属于arraylist。

起初我认为这样的事情就足够了:

for (int i = 0; i < myList.size(); i++)
{
  if (packet.getAddress().equals(InetAddress.getByName(myList.get(i))))
  {
    System.out.println("this packet's IP address is in list");
  }

  else
  {
    System.out.println("this packet's IP address is not in list!");
  }

我认为其他声明会解决这种情况,但我错了。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:4)

我建议将ArrayList转换为Set(不是在每次检查之前,因为这将是不必要的开销),这样就可以避免for循环。这只是一个问题

Set<InetAddress> mySet = new HashSet<InetAddress>(myList);
...
if(mySet.contains(packet.getAddress())) {
 // ...
}

我认为你也可以使用myList.contains,但我认为实现无论如何都会遍历列表,所以使用Set会更快。

答案 1 :(得分:2)

在知道IP不存在之前,您必须检查整个列表:

boolean found = false;
for (int i = 0; i < myList.size() && !found; i++) {
    if (packet.getAddress().equals(InetAddress.getByName(myList.get(i)))) {
        found = true;
        System.out.println("this packet's IP address is in list");
    }
}
if (!found) {
    System.out.println("this packet's IP address is not in list!");
}

答案 2 :(得分:1)

问题是您是否为每个与地址不匹配的项目打印邮件。相反,您可以将此功能封装在方法中,返回布尔值,然后执行打印:

public boolean isPackedInList() {
    for (int i = 0; i < myList.size(); i++) {
        if (packet.getAddress().equals(InetAddress.getByName(myList.get(i)))) {
            return true;
        }
    }
    return false;
}

然后使用它:

if (isPackedInList()) {
    System.out.println("this packet's IP address is in list");
} else {
    System.out.println("this packet's IP address is not in list!");
}