对于动态删除list中的特定元素,一般用linkedList,删除时有以下两种方法。

1. 循环遍历,找到要删除的元素后删除并且减少list长度。如果不减少list长度,那么就仅仅删除了元素,但没改变循环的判定条件(list.size),就会出现数组越界。

for(int i = , len = list.size(); i < len; i++){
if(list.get(i) == ){
list.remove(i);
len--;
i--;
}
}

2. List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。所以我们还有一个更好的做法是:

        LinkedList<Integer> list = new LinkedList<Integer>();
list.add(4);
list.add(2);
list.add(1);
list.add(1);
list.add(2); Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int i = iterator.next();
if(i == 1){
iterator.remove();
}
}

结果:

分析:

由于LinkedList<Integer> list 的元素对象是Integer,所以我们通过list.iterator()得到的就是Iterator<Integer> iterator。通过循环

      while(iterator.hasNext()){
int i = iterator.next();
if(i == 1){
iterator.remove();
}
}

看有没有下一个元素,如果有就继续循环,如果没有就跳出循环。在循环里的第一句写

int i = iterator.next();

得到每一个元素对象,因为iterator是Integer对象,所以可以变为int。这里的i就是循环中的得到的对象。

当这个对象的值=1的时候就remove掉。所以原来的list中删除了所有值为1的元素。

        if(i == 1){
iterator.remove();
}

原理是:通过list的.iterator()方法可以得到它的迭代器对象,然后我们就可以通过迭代器进行操作了。其实iterator本身就是list,map,set的父类

全部代码:

package com.kale.list;

import java.util.Iterator;
import java.util.LinkedList; public class Test { public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(4);
list.add(2);
list.add(1);
list.add(1);
list.add(2); Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int i = iterator.next();
if(i == 1){
iterator.remove();
}
}
for (Integer i:list) {
System.out.println("element = " + i);
}
}
}

删除list中的特定元素的更多相关文章

  1. (转载)PHP删除数组中的特定元素的代码

    (转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...

  2. PHP实现删除数组中的特定元素

    方法1: <?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false) array_sp ...

  3. python中如何删除列表中的所有元素

    今天写代码的时候遇到一个小问题,Python中要删除列表中的所有元素.Python本身就提供了pop.remove.del这些删除的函数.我想着用循环实现,结果很麻烦.几番周折上了stackoverf ...

  4. 如何使用 Java 删除 ArrayList 中的重复元素

    如何使用 Java 删除 ArrayList 中的重复元素 (How to Remove Duplicates from ArrayList in Java) Given an ArrayList w ...

  5. Java删除ArrayList中的重复元素

    Java删除ArrayList中的重复元素的2种方法 ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇到那种必 ...

  6. C#如何删除数组中的一个元素

    C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...

  7. C语言 · 删除数组中的0元素

    算法提高 6-9删除数组中的0元素   时间限制:1.0s   内存限制:512.0MB      编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,C ...

  8. 删除List中指定的元素

    删除List中指定的元素 CopyOnWriteArrayList是ArrayList的一个线程安全的变体实现,即可在多线程并发环境中使用 List<Map<String, Object& ...

  9. Java之——删除ArrayList中的反复元素的2种方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...

随机推荐

  1. 《JavaScript 高级程序设计》第一章:简介

    JavaScript 历史 JavaScript的诞生的主要是当时的 netspace 公司谋求为自己的浏览器 Navigator 添加一种脚本语言,以便在本地客户端进行一些行为操作,而这一功能的需求 ...

  2. 插件bootstrap-table

    基于Metronic的Bootstrap开发框架经验总结(16)-- 使用插件bootstrap-table实现表格记录的查询.分页.排序等处理 在业务系统开发中,对表格记录的查询.分页.排序等处理是 ...

  3. fiddler抓https 关于证书一项

    由于我之前电脑装过fiddler然后这次弄证书也没有理解明白,导致失败了.然后就百度到了下面的教程. https://www.cnblogs.com/joshua317/p/8670923.html ...

  4. 【LOJ】#2533. 「CQOI2018」交错序列

    题解 有毒吧 这题\(O(n)\)过不去 非得写\(O((a + b)^3\log n)\)的矩乘,同样很卡常 把\(x\)换成\(n - y\) 我们拆完式子发现是这样的 \(\sum_{i = 0 ...

  5. ref:spring配置数据库方式

    ref:https://blog.csdn.net/alsyuan/article/details/73239240 1.使用org.springframework.jdbc.datasource.D ...

  6. CSS3利用背景渐变和background-size配合完成渐变与条纹效果[持续更新中...]

    1.不等垂直条纹. <!-- 不等垂直条纹 --> <div class="div1"></div>div1 div{ width: 200px ...

  7. 5969 [AK]刻录光盘

    题目描述 Description • 在FJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时 ...

  8. BZOJ.4939.[Ynoi2016]掉进兔子洞(莫队 bitset 分组询问)

    BZOJ 洛谷 删掉的数即三个区间数的并,想到bitset:查多个区间的数,想到莫队. 考虑bitset的每一位如何对应每个数的不同出现次数.只要离散化后不去重,每次记录time就可以了. 但是如果对 ...

  9. BZOJ2217 : [Poi2011]Lollipop

    若能得到一个和为t的区间,那么至少去掉两端点中任意一个后必定能得到和为t-2的区间. 所以只需要分别找到和最大的和为奇数和偶数的区间,然后$O(n)$完成构造即可. #include<cstdi ...

  10. 1、QThreadPool线程池的使用,线程和Widget通过QMetaObject::invokeMethod交互。

    自定义一个QThreadPool,N个线程QRunnable,线程和Widget通过QMetaObject::invokeMethod交互. QRunnable非继承自QObject,所以不可以用信号 ...