每日一问(如何在List中加入、设置、获取和删除其中的元素?)
作为集合接口的一部分,对List接口所做的操作,最常见的就是增删查改了。这里总结下JAVA 中List接口及实现该接口的类实现这些操作的方法。
一.增加新的元素的方法
在Collection接口中定义了boolean add(E e)和addAll(Collection<? extends E> c)的方法,而List接口继承了Collection接口,并且List接口也定义了void add(int index, E element)的方法,因此只要是实现了List接口的类,均会实现这三个接口。
这三个个方法分别提供了在集合的最后加入指定元素/指定集合内的所有元素/指定索引位置加入指定元素的方法,虽然实际上各个类的实现不同,但是这结果是差不多的。
另外,还有一个方法也可以插入元素,那就是通过listIterator()方法返回集合的ListIterator实例,这是一个重要的接口,可以视为Iterator的一种增强,可使得集合类可以反向遍历并且在遍历的位置插入和修改元素。
二.设置元素值的方法
List定义了E set(int index, E element)方法,可通过该方法来设置集合元素值。这里如果是LinkedList,则不推荐使用set和get方法,因为实际上LinkedList类中,使用这些方法,依然会进行遍历进行访问,效率较低,且该方法会对集合数进行计算,判断从集合头还是集合尾开始,相关源码为
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
另外也可通过上文中提到的ListIterator接口来设置元素
三.获取元素值的方法
由Iterator接口派生出的类均可以通过Iterator接口来遍历集合元素值,List接口由Iterator<E> iterator()返回对于的遍历。
List定义了E get(int index)方法,可通过该方法来获取集合元素。
另外也可通过上文中提到的ListIterator接口来获取元素
四.删除元素
Iterator接口定义了remove()方法来删除当前遍历的元素,这里需要注意的是,以下语句是错误的,因为remove()方法在调用后并不会自动将指向下一个元素。
Iterator it = l.iterator();
it.next();
it.remove();
it.remove();
List定义了E remove(int index)方法,可通过该方法来删除集合元素。
当然,在实际上,有JAVA api提供的对List实例进行操作的方法不止这些,还有很多,这里仅是我个人使用过的方法。仅供参考
每日一问(如何在List中加入、设置、获取和删除其中的元素?)的更多相关文章
- 【转】如何在vmware中如何设置ip
如何在vmware中如何设置ip 1.修改网络接口选hostonly2.虚拟机里安装vmware-tool,对鼠标和图形进行更好地支持.如果你在图形界面下,首先要切换到文本模式.右键点击桌面,打开一个 ...
- 如何在Mongodb中实现数据超时自动删除功能?
在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不 ...
- 2.27 MapReduce Shuffle过程如何在Job中进行设置
一.shuffle过程 总的来说: *分区 partitioner *排序 sort *copy (用户无法干涉) 拷贝 *分组 group 可设置 *压缩 compress *combiner ma ...
- 控制面板中java设置项如何删除
卸载jdk或者jre后,如果控制面板中仍然有java项,重新安装可能仍然无法设置,提示找不到"javacpl.exe" 解决办法:删除C:\windows\system32\下的j ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- 如何在WinForm中发送HTTP请求
如何在WinForm中请求发送HTTP 手工发送HTTP请求主要是调用 System.Net的HttpWebResponse方法 手工发送HTTP的GET请 求: string strURL = &q ...
- 如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)
写在前面: 先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The re ...
- CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo
PS(废话): 这段时间都在研究网易的Pomelo框架,作为新手小白,自然遇到了不少坑爹的事情.(当然也有可能是因为自己技术不过关的原因所以导致在很多基础的问题上纠结了很久.)网上也搜索了好久,但是基 ...
- 为何在新线程中使用注解获取不到Spring管理的Bean
新建的线程类NewThread,在这个类中国使用Spring的注解获取Service,为null 网上已有这种问题的解决方案,但是为何在新线程中使用注解获取不到Spring管理的Bean? 问了老大, ...
随机推荐
- asp.net core 发布到docker 极简步骤
1.使用dotnet命令发布项目 2.把发布成功的文件通过scp等工具发布到linux服务器上,在当前目录下新建一个dockerfile 3.使用asp.net core镜像为底包构建一个新的镜像 4 ...
- Docker 入门之docker容器创建
使用docker容器的大多数人都是因为想要隔离不同运行环境的差异,使得自己的应用能更好的移植和部署.那么我们来看看掌握docker需要掌握哪些方面. 1,搭建docker环境 2,编译镜像并将其运行成 ...
- django(新增model)No migrations to apply.
django 1.8版本,在models下新建一个class,无法在数据库创建新表的问题: - models.py class HostPwd(models.Model): hostname = mo ...
- XSS构造技巧
利用字符编码: 百度曾经出过一个XSS漏洞,在一个<script>标签中输出一个变量,其中转义了双引号: var redirectUrl="\";alert(/XSS/ ...
- FileZilla-FTP连接失败
状态: 已登录状态: 读取“/”的目录列表...命令: CWD /响应: 250 CWD successful. "/" is current directory.命令: TYPE ...
- 解决iscroll.js上拉下拉刷新手指划出屏幕页面无法回弹问题
博客已迁移至http://zlwis.me. 使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回.很多人因为解 ...
- js中使用对象注意
var myObject = { hello: '你好', world : '世界' } 正常使用 myObject.hello //输出你好 若引用的属性本身是一个变量: 需要用方括号使用 va ...
- 多种方法实现左右固定,中间自适应的CSS布局
布局是面试中常问的问题,尤其是这类的题目,怎么答才好呢? 大多数人的第一个方法是浮动,没错,浮动.第二个方法呢?你回答定位,没错.第三个方法呢?.... 第四个方法呢?第五个方法呢?.... 其实能想 ...
- python中数据分析常用函数整理
一. apply函数 作用:对 DataFrame 的某行/列应用函数之后,Apply 返回一些值.函数既可以使用默认的,也可以自定义.注意:在第二个输出中应用 head() 函数,因为它包含了很多行 ...
- Teamproject Week7 --Scrum Meeting #1 2014.10.28
这是团队的第一次会议,具体议题如下: 1)我们明确了团队成员的职责所需: PM职责:根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划. 控制项目组各成员的工作进度,即时了 ...