是否有一种特殊的方法来检查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!");
}