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

Java:检查IP地址是否在数组列表中,java,arraylist,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)))) { Sys

是否有特定的方法来检查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!");
  }
for(int i=0;i

我原以为else声明可以解决这个问题,但我错了。如果有任何建议,我们将不胜感激。

在知道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!");
}
boolean-found=false;
对于(int i=0;i
问题在于,您正在打印与地址不匹配的每个项目的邮件。相反,您可以将此功能封装在一个方法中,返回一个布尔值,然后执行打印:

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

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

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

我想你也可以使用myList.contains,但我认为实现会在列表中循环,因此使用集合会更快。

你在寻找吗?如果你计划进行大量查找,请使用
HashSet
。这将大大加快速度,特别是当你有大量IP地址时。使用基于哈希的集合或者更快的搜索如果可以在设计中使用Set,则添加()方法根据值是否已在集合中返回布尔值。ooo我一定会查看哈希集!为什么不在找到ip时只使用
break
?设置布尔标志:)@最重要的是也可以。但是如果使用break,您仍然需要该标志才能知道是否找到ip(除非你要依赖i的值,因为i的可读性较差)。啊,好吧,这是有道理的。谢谢!我认为这是个好主意。让事情变得更快总是好的
Set<InetAddress> mySet = new HashSet<InetAddress>(myList);
...
if(mySet.contains(packet.getAddress())) {
 // ...
}