您将获得以下数字序列:1、652、5、15、385、4、55、666、13、2、4658、9、55、-588、10、1083、17、4。您可以仅使用For循环和ArrayList删除重复的数字。
public class Ex {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add(652);
list.add(5);
list.add(15);
list.add(385);
list.add(4);
list.add(55);
list.add(666);
list.add(13);
list.add(2);
list.add(4658);
list.add(9);
list.add(55);
list.add(-588);
list.add(10);
list.add(1083);
list.add(17);
list.add(4);
System.out.println("Before remove : " + list);
for (int i = 0; i < list.size(); i++) {
for (int j = 1; j < list.size(); j++) {
if (list.get(i) == list.get(j)) {
list.remove(j);
}
}
}
System.out.println("After remove duplicate items : "+list);
}
}
产出
Before remove : [1, 652, 5, 15, 385, 4, 55, 666, 13, 2, 4658, 9, 55, -588, 10, 1083, 17, 4]
After remove duplicate items : [1, 5, 385, 55, 13, 4658, -588, 1083, 4]
一些没有重复的项目丢失了。例如10和652。
6条答案
按热度按时间33qvvth11#
你有很多问题:
1.当
i == j
时,您将移除非重复记录。为避免此情况,内部循环应以int j = i + 1
开始。1.删除记录时,应该递减
j
,因为被删除元素后面的所有元素都下移一个索引。1.您应该将
Integer
s与equals
进行比较,而不是与==
进行比较0md85ypi2#
内部循环总是以
j = 1
开始,这意味着你将移除列表中除了索引0处的元素之外的每一个元素。你应该改为j = i + 1
。内部循环将只检查列表中的以下元素,而不是你正在比较的元素。移除之后,你应该使用j--
,这样下一个元素的索引对应于j。当比较基元类型(int
)时,可以使用==
;当比较引用类型(Integer
)时,应该使用equals
。这是我的建议:
eoigrqb63#
其他值呢?15或666?您确定您期望正确的输出吗?使用
Iterator
从列表中删除元素要好得多:输出:
qgelzfjb4#
输入
输出
vwkv1x7d5#
0wi1tuuw6#
公共类删除复制{
}