java集合之List

List 接口实现了 Collection 接口,它主要有两个实现类:ArrayList 类和 LinkedList 类。在 List 集合中允许出现重复元素。与 Set 集合不同的是,在 List 集合中的元素是有序的,可以根据索引位置来检索 List 集合中的元素,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。

ArrayList 类

ArrayList 类提供了快速的基于索引的成员访问方式,对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相对较慢。该类的常用构造方法有如下两种重载形式。

  • ArrayList():构造一个初始容量为 10 的空列表。
  • ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 的元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。

List接口的特点:

1. 有序【存储有序】

2. 可重复

3. 可以存储 `null`值

4. 部分子集合线程安全,部分不安全 例如 `ArrayList` 和 `Vector`

5. 有索引,针对每个元素能够方便地查询和修改

6. 判断元素是否重复依赖于`equals`方法

​ a. 如果元素是系统类,不需要重写`equals`方法

​ b. 如果是自定义类,就需要我们按需求重写 `equals`方法

java.util.ArrayList < E > 的一些方法 描述

  • ArrayList() 构造函数,创建一个空的列表, size为0
  • add(o: E): void 在list的末尾添加一个元素o
  • add(index: int, o: E): void 在指定的index处插入元素o
  • clear(): void 从list中删除所有元素
  • contains(o: Object): boolean 如果list含有元素o,返回true
  • get(index: int): E 返回指定index处的元素
  • indexOf(o: Object): int 返回list中第一个匹配元素的index
  • isEmpty(): boolean 如果list不含元素,返回true
  • lastIndexOf(o: Object): int 返回list中最后一个匹配元素的index
  • remove(o: Object): boolean 删除list中的第一个元素o,如果元素被删除,返回true
  • size(): int 返回list中元素个数
  • remove(index: int): boolean 删除指定index处的元素,如果元素被删除,返回true
  • set(index: int, o: E): E 设置指定index处的元素为o

注意: 使用 subList() 方法截取 List 集合中部分元素时要注意,新的集合中包含起始索引位置的元素,但是不包含结束索引位置的元素。例如,subList(1,4) 方法实际截取的是索引 1 到索引 3 的元素,并组成新的 List 集合。

List接口去除重复元素:**

​ 方式一:创建一个新的集合去除重复元素再使用地址传递

​ 方式二:在原集合的基础上使用选择排序思想去除重复元素

 1 List<String> list = new ArrayList<String>();
 2 list.add("张三");
 3 list.add("李四");
 4 list.add("李四");
 5 list.add("李四");
 6 list.add("王五");
 7 
 8 for (int i = 0; i < list.size(); i++) {
 9 for (int j = i + 1; j < list.size(); j++) {
10 if (list.get(i).equals(list.get(j))) {
11 list.remove(j);
12 j--;
13 }
14 }
15 }

 

并发修改异常的处理:

异常名称:并发修改异常 java.util.ConcurrentModificationException

产生原因:在使用迭代器迭代的同时使用原集合对元素做了修改

解决办法:

1. 使用 toArray 方法

2. 使用 普通 for 遍历

3. 使用 ListIterator 遍历集合并且使用 列表迭代器修改元素

LinkList类

LinkedList 类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高,但是 LinkedList 类随机访问元素的速度则相对较慢。这里的随机访问是指检索集合中特定索引位置的元素。

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作
LinkedList 实现 List 接口,能对它进行队列操作
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的

LinkedList 类除了包含 Connection 接口和 List 接口中的所有方法之外,还实现了下列方法。

 

void addFirst(E e) 将指定元素添加到此集合的开头
void addLast(E e) 将指定元素添加到此集合的末尾
E getFirst() 返回此集合的第一个元素
E getLast() 返回此集合的最后一个元素
E removeFirst() 删除此集合中的第一个元素
E removeLast() 删除此集合中的最后一个元素

 

 这篇博文讲的特别好,需要详细了解可参考      https://www.cnblogs.com/lintong/p/4374292.html

posted @ 2019-05-04 21:00  凄夜听雨  阅读(263)  评论(0编辑  收藏  举报