所以我有2个txt文件,都有ip:port的列表
我正在将列表加载到他们自己的链接列表中
public static LinkedList<DataValue> result = new LinkedList<DataValue>();
public static LinkedList<DataValue> badresult = new LinkedList<DataValue>();
他们有一个类值
public static class DataValue {
protected final String first;
protected final int second;
public DataValue(String first, int second) {
this.first = first;
this.second = second;
}
}
尝试做到这一点...... 将list1加载到结果中 将list2加载到badresult
然后从结果中删除所有badresult
所以加载完成
public static void loadList() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("./proxy.txt"));
String line;
String args[];
String first;int second;
while ((line = br.readLine()) != null) {
args = line.split(":");
first = args[0];
second = Integer.parseInt(args[1]);
result.add(new DataValue(first, second));
}
}
public static void loadUsed() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("./usedproxy.txt"));
String line;
String args[];
String first;int second;
while ((line = br.readLine()) != null) {
args = line.split(":");
first = args[0];
second = Integer.parseInt(args[1]);
badresult.add(new DataValue(first, second));
}
}
这是我尝试从结果链表
中删除所有相同结果的失败尝试public static void runCleaner() {
for (DataValue badresultz : badresult) {
if (result.remove(badresultz)) {
System.out.println("removed!");
} else {
System.out.println("not removed...");
}
}
}
答案 0 :(得分:1)
在Java中,我们使用equals
方法来检查对象是否相等。您的DataValue
类没有实现这一点,因此当您要求从列表中删除对象时,它实际上是使用==
(由Object
类实现)来比较对象。
System.out.println((new DataValue("hello", 1)).equals(new DataValue("hello", 1)));
// prints false
这是因为2个对象实际上由内存中的2个不同空格表示。要解决此问题,您需要覆盖equals
类中的DataValue
方法,同样优先覆盖hashCode
方法也是如此。我使用eclipse为我生成了两种方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((first == null) ? 0 : first.hashCode());
result = prime * result + second;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DataValue other = (DataValue) obj;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
if (second != other.second)
return false;
return true;
}