您将获得以下数字序列, 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。
答案 0 :(得分:4)
您有很多问题:
i == j
时删除非重复记录。为避免内部循环应以int j = i + 1
开头。j
,因为删除的元素之后的所有元素都向下移动了一个索引。Integer
与equals
(而不是==
)进行比较答案 1 :(得分:1)
内部循环始终以\d{1,2}
开始,这意味着您将删除列表中除索引0之外的所有单个元素。您应改为让j = 1
。然后,内部循环将仅检查列表的以下元素,而不检查您要比较的元素。删除后,应使用j = i + 1
,以便下一个元素的索引对应于j。比较原始类型(j--
时可以使用==
。比较引用类型(int
)时可以使用Integer
。
这是我的建议:
equals
答案 2 :(得分:0)
其他值是15还是666?您确定期望输出正确吗?
最好使用Iterator
从列表中删除元素:
public static ArrayList<Integer> removeDuplicates(ArrayList<Integer> numbers) {
ListIterator<Integer> it = numbers.listIterator();
numbers.removeIf(num -> isDuplicated(numbers, it.previousIndex(), num));
return numbers;
}
private static boolean isDuplicated(ArrayList<Integer> numbers, int toPos, int val) {
for (int pos = 0; pos < toPos; pos++)
if (numbers.get(pos) == val)
return true;
return false;
}
输出:
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, 652, 5, 15, 385, 4, 55, 666, 13, 2, 4658, 9, 55, -588, 10, 1083, 17, 4]
答案 3 :(得分:0)
public class ArrayListExample {
public static void main(String[] args) {
// ArrayList with duplicate elements
ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
System.out.println(numbersList);
Log.d("DBG",numbersList+"");
// ArrayList without duplicate elements
LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);
ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);
System.out.println(listWithoutDuplicates);
Log.d("DBG",listWithoutDuplicates+"");
}
}
输出
[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
答案 4 :(得分:0)
// Code for Duplicates not allowed ... for upper example
for(int i = 0; i < list.size(); i++) {
for(int j = i + 1; j < list.size(); j++) {
if(list.get(i).equals(list.get(j))){
list.remove(j);
j--;
}
}