每日一问(如何在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? 问了老大, ...
随机推荐
- 第1章 Linux命令行简介
1.1 Linux命令行概述 1.2 在Linux命令行下查看命令帮助 1.3 Linux关机.重启.注销命令 1.4 老男孩的运维思想 1.1 Linux命令行概述 1.1.1 Linux命令行的作 ...
- GitHub笔记(四)——标签管理
五 标签管理 1 打标签.默认master $ git tag v1.0 要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令: $ git tag v0.9 f ...
- WebRTC入门
什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器.乙和服务器之间建立信道.甲给乙发 ...
- FirstWebApp
servlet规范中定义了web应用程序的目录层次:http://localhost:8080/docs/appdev/deployment.html 第一个web应用程序 开发,并部署到tomcat ...
- Mysql Order By注入总结
何为order by 注入 本文讨论的内容指可控制的位置在order by子句后,如下order参数可控"select * from goods order by $_GET['order' ...
- maven:新建的maven工程需要添加一下插件
//下面的代码是改变maven的默认使用Java版本,本机是jdk1.7所以用1.7<plugins> <plugin> <groupId>org.apache.m ...
- 互评beta版本 - hello word!【空天猎】
基于NABCD评论作品 1.Need需求:市面上同类型的手机及PC端飞行射击类游戏有很多,所以从需求方面来说,这款游戏的潜在客户非常有局限性.近些年较火的飞行射击类游戏,例如腾讯14年发行的<全 ...
- Mysql常用配置及优化
[client]# 该目录下的内容常用来进行localhost登陆,一般不需要修改port = 3306 # 端口号socket = /var/lib/mysql/mysql.sock # 套接字文件 ...
- spring冲刺第二天
昨天查找了安卓开发的相关资料以及炸弹人游戏的资料. 由于今天课程比较多,只在晚上将安卓开发环境配置完成. 在安装软件时环境配置出现了问题,不过问过同学后成功解决.
- 1~n中1的和
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数: 要求:写一个函数f(n),返回1到n之间出现“1“的个数, 思路: 1.先判断这个数共多少位,假设为n位: ...