[英]Remove Duplicates from LinkedList without using HashSet - Java
如果两个学生相同,我试图从链接列表中删除一个学生,这意味着输入重复。 这正在用JUnit测试用例进行测试。 但是,所有测试都将返回相同的列表,并且不会删除任何学生。 这是removeDuplicate方法,其中list是我的linkedList。
public void removeDuplicates() {
for (int i = 0; i < list.size()-1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
}
}
}
}
一个失败的测试用例的示例:
public void test_removeDuplicates_1() {
ISimpleDatabase model = new SimpleDatabaseModel();
Student s1 = new Student("John Doe", "G123456789", 3.5);
Student s2 = new Student("Paul Graham", "G123456987", 2.75);
Student s3 = new Student("Mary Joe", "G331456987", 3.25);
Student s4 = new Student("Martin Fowler", "G654789321", 3.65);
Student s5 = new Student("Paul Graham", "G123456987", 2.75);
Student s6 = new Student("Mary Joe", "G331456987", 3.25);
model.insert(s1);
model.insert(s2);
model.insert(s3);
model.insert(s4);
model.insert(s5);
model.insert(s6);
model.removeDuplicates();
String expected = s1 + "\n" + s2 + "\n" + s3 + "\n" + s4;
assertEquals(expected,model.toString().trim());
哪个返回此错误:
我确定错误在于removeDuplicates()方法中,但我似乎无法弄清楚。 谢谢你的帮助。
如果删除某个项目,则需要将j
后退一步,以便测试新改组的项目,否则您将错过它。
if (list.get(i).equals(list.get(j))) {
list.remove(j);
j--;
}
我发现了一些可行的方法。 我只是检查重复项的字段之一,因为如果学生ID相同,那么学生也将相同。 这似乎使我现在通过了所有测试用例。 只是需要一些时间才能解决。 感谢大家。
public void removeDuplicates() {
for (int i = 0; i < list.size() - 1; i++) {
int count = i + 1;
while (count < list.size()) {
if (list.get(i).getGnumber().equals(list.get(count).getGnumber())) {
list.remove(count);
} else {
count++;
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.