是否有特定的方法来检查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!");
}
我认为其他声明会解决这种情况,但我错了。任何建议将不胜感激。
答案 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!");
}