Java:检查IP地址是否在Array List中



是否有一种特殊的方法来检查IP地址是否不存在于数组列表中?现在我有一个由IP地址字符串组成的数组列表(例如:"192.168.0.4",等等)。收到数据包后,我想检查数据包的IP地址是否属于数组列表。

起初我以为这样就足够了:

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!");
  }

我以为else语句可以解决这个问题,但是我错了。

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

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

我认为你也可以使用myList。

在你知道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!");
}

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

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!");
}

相关内容

  • 没有找到相关文章

最新更新