List<E> 接口简明
2024-10-19 04:22:56
java.util.List<E>接口
、ListIterator
、equals 方法
List 是 Collection 接口的子接口,具备了 Collection 的所有方法。
List 体系特有的共性方法中,查阅方法发现 List 的特有方法都有索引,这是该集合最大的特点。
List : 有序( 元素存入集合的顺序和取出的顺序一致 ) ,元素都有索引。元素可以重复。
- ArrayList : 底层数据结构是数组, 线程不同步,ArrayList 替代了 Vector ,随机访问速度快。
- LinkedList : 底层数据结构是链表,线程不同步,增删元素的速度快。
- Quene : Queue接口窄化了对LinkedList的方法的访问权限。
API java.util.List
- 添加:
add(index,element)
:在指定的索引位插入元素。
addAll(index,collection)
:在指定的索引位插入一堆元素。 - 删除:
remove(index)
:删除指定索引位的元素。 返回被删的元素。 - 获取:
Object get(index)
:通过索引获取指定元素。
int indexOf (obj)
:获取指定元素第一次出现的索引位,如果该元素不存在返回-1;
所以,通过-1,可以判断一个元素是否存在。
int lastIndexOf(Object o)
:反向索引指定元素的位置。
List subList (start,end)
:获取子列表。 - 修改:
Object set(index,element)
:对指定索引位进行元素的修改。 - 获取所有元素:
ListIterator listIterator ()
:list 集合特有的迭代器。
for ( int x = 0; x < list.size(); x++ ){
System.out.print("get:" + list.get(x));
}
角标遍历
并发修改
在进行列表元素迭代的时候,如果在迭代过程中,迭代器检测出了列表从外部被修改了。 会抛出ConcurrentModificationException
异常。
List<String> list = new LinkedList<>();
...
ListIterator<String> it1 = list.listIterator();
ListIterator<String> it2 = list.listIterator();
it1.next();
it1.remove();
it2.next() //throws ConcurrentModificationException
导致的原因是:
大多数集合类返回的快速失败迭代器在遍历时不允许结构性修改(结构性修改指添加,删除和更新一个元素) 当遍历的同时被结构性修改,就会抛出ConcurrentModificationException
异常。如何解决呢?
在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出ConcurrentModificationException
。编写依赖于此异常程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。
equals 方法
对于list 集合,底层判断元素是否相同,其实用的是元素自身的equals 方法完成的。所以建议元素都要复写equals 方法 ,建立元素对象自己的比较相同的条件依据。
LinkedList : 的特有方法。
- addFirst();
- addLast();
- offerFirst();
- offerLast();
- getFirst():获取链表中的第一个元素。如果链表为空,抛出 NoSuchElementException;
- getLast();
- peekFirst();获取链表中的第一个元素。如果链表为空,返回 null。
- peekLast();
- removeFirst():获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,抛出NoSuchElementException
- removeLast();
- pollFirst();获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,返回 null。
- pollLast();
最新文章
- wpf 加载项目图片的几种写法
- No Launcher activity found!
- mac os x安装php7.0和phalcon3.0
- LPTHW 笨方法学习python 16章
- Ubuntu 14.10下安装深度音乐客户端
- JavaScript实现简单的打印功能
- jacob 操作word转pdf
- 从头開始写项目Makefile(七):统一目标输出文件夹
- vector的成员函数解析
- python网络爬虫学习笔记
- stylus选中hover元素的兄弟元素下的子元素
- python实例编写(2)--等待,一组对象,层级元素,frame对象处理
- destoon分页
- PAT1070:Mooncake
- 【PAT】B1005 继续(3n+1)猜想
- 前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值
- springboot 集成mybatis plus3
- Linux - 在当前系统内查找信息的方法
- protobuf 测试使用
- linux使用bin文件安装jdk