一、前言:之前对list集合的增删改查有点模糊,现在整理了一下。
二、对list集合进行删除:
1.普通的for循环删除某个指定的元素:
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 11; i++) {
list.add(i);
}
System.out.println("删除前的集合为:"+list);
int leng = list.size();
for (int i = 0; i < leng; i++) {
if(list.get(i) == 2){
list.remove(i);
leng--; //每次删除一个元素时,都应该将list的大小-1;
i--; //每删除一个元素时,角标应该从被删除的元素的角标开始。
}
}
System.out.println("删除后的集合为:"+list);
结果如下:删除前的集合为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
删除后的集合为:[0, 1, 3, 4, 5, 6, 7, 8, 9, 10]
2.普通的for循环删除多个连续的元素(原理同1):
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 20; i++) {
list.add(i);
}
System.out.println("删除前的集合为:"+list);
int leng = 10; //表示删除前10个元素
for (int i = 0; i < leng; i++) {
list.remove(i);
leng--;
i--;
}
System.out.println("删除后的集合为:"+list);
结果如下:删除前的集合为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
删除后的集合为:[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
3、巧妙利用另一个集合来过渡,达到删除多个连续的元素:
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
System.out.println("删除前的集合为:" + list);
List<Integer> listMode = new ArrayList<Integer>();
for(int i=20;i<list.size();i++){
listMode.add(list.get(i));
}
System.out.println("删除后的集合为:" +listMode);
4、利用listIterator迭代器,从指定的位置开始迭代:
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
System.out.println("删除前的集合为:" + list);
ListIterator<Integer> iterator = list.listIterator(20);
List<Integer> listModel = new ArrayList<Integer>();
for(;iterator.hasNext();){
Integer value = iterator.next();
listModel.add(value);
}
System.out.println("删除后的集合为:" +listModel);
5、反向迭代的方式,连续删除多个元素
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
System.out.println("删除前的集合为:" + list);
LinkedList<Integer> listModel = new LinkedList<Integer>();
for (int i = list.size() - 1; i >= 20; i--) { //20表示删除该集合的前20个元素。
int value = list.remove(i);
listModel.addFirst(value);
}
System.out.println("删除后的集合为:" + listModel);
6、利用LinkedList集合的特性,连续删除多个元素
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
System.out.println("删除前的集合为:" + list);
LinkedList<Integer> linkedList = new LinkedList<Integer>();
for(Integer value : list){
linkedList.add(value);
}
for(int i=0;i<10;i++){ //10 表示删除前10个元素
linkedList.removeFirst();
}
System.out.println("删除后的集合为:" +linkedList);
7、普通的for循环删除单个元素(倒着删,list的大小变化不影响下一个遍历的元素的角标的变化)
for (int i = list.size() - 1; i >= 0; i--) {
if(list.get(i)==8){
list.remove(i);
}
}
8、iterator接口迭代的方式删除单个元素:
Iterator<Integer> iterator = list.iterator();
for (; iterator.hasNext();) {
Integer value = iterator.next();
if (value == 4) {
iterator.remove();
}
}
9、但是,4中的迭代接口只是适合删除,不适合修改、添加值。listIterator接口迭代可以删除、修改、添加值。
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println("删除前的集合为:" + list);
ListIterator<Integer> iterator = list.listIterator();
for (; iterator.hasNext();) {
Integer value = iterator.next();
if (value == 4) {
// iterator.add(10); 增
// iterator.set(90); 改
// iterator.remove(); 删
}
}
System.out.println("删除后的集合为:" + list);