如何删除集合(数组)中指定的元素##
1.首先删除数组中的元素,没有特定的api
由于没有特定的快捷删除的api,所以就自己来实现,最后封装成工具方法
实现思路:
1.用最后一个索引位置的元素来替代想要删除的索引位置的元素
2.把原数组进行缩容
代码:
int[] arr = new int[]{1,2,4,5,9,8,0};
System.out.println(Arrays.toString(arr) +"--------77777");
//替换
arr[2]=arr[arr.length-1];
//缩容
int[] arr1 = Arrays.copyOf(arr, arr.length - 1);
System.out.println(Arrays.toString(arr1) +"??????????");
打印结果:
[1, 2, 4, 5, 9, 8, 0]--------77777
[1, 2, 0, 5, 9, 8]??????????
这就完成了数组的删除元素,如果有排序要求,调用排序方法即可
2. list集合删除元素
list集合有自带的删除索引位置元素的方法remove(int index);这为我们删除集合元素提供了很大方便,
但是注意:
如果用数组的List list = Arrays.asList(arr); 这个返回的list就不能使用remove方法,否则会报
java.lang.UnsupportedOperationException不支持的操作异常
原因:
首先我们看Arrays.asList(arr)的源码
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
接着点进返回的new ArrayList<>(a);
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
可以看到:这个a是final修饰的常量,常量不能做修改操作,remove时会报异常
所以使用Arrays.asList(arr)转化的集合不能使用remove()
但使用new的list,list.add添加元素的可以使用remove()删除指定元素。
那么怎么做list的删除呢?有以下三种方法
1.使用集合的迭代器iterator
代码:
Iterator iterator = list.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
if (next.equals("5")){ //遍历集合元素,当元素等于某个值时,进行删除
iterator.remove();
}
}
2.使用for循环
for (int i = 0 ;i <list.size();i++){
if (list.get(i).equals("4")){ //遍历集合元素等于某个值,删除这个元素
list.remove(i);
}
}
3.使用removeIf()
list.removeIf(l->l.equals("1")); //如果元素等于1 就删除!
邮箱1149513559@qq.com