Java集合-List 集合
一、List 集合
1.1 List 集合概述和特点
1.1.1、List 集合概述
- 有序集合(也成为序列):用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。
- 与 Set 集合不同,列表通常允许重复的元素。
1.1.2、List 集合特点
- 有序:存储和取出的元素顺序一致。
- 可重复:存储的元素可以重复。
1.2、使用 List 集合
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 打印元素
System.out.println(list);
// 遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
1.3、List 集合特有方法
| 方法名 | 说明 |
|---|---|
| void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
| E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
| E get(int index) | 返回指定索引处的元素 |
1.3.1、add(int index,E element) 方法
- 在此集合中的指定位置插入指定的元素。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 指定位置添加数据
list.add(1,"javaee");
// 打印元素
System.out.println(list);
1.3.2、remove(int index) 方法
- 删除指定索引处的元素,返回被删除的元素。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 删除指定位置数据
System.out.println(list.remove(1));
// 输出元素
System.out.println(list);
1.3.3、set(int index,E element) 方法
- 修改指定索引处的元素,返回被修改的元素。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 修改指定位置数据
System.out.println(list.set(1,"javaee"));
// 输出元素
System.out.println(list);
1.3.4、get(int index) 方法
- 返回指定索引处的元素。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 返回指定位置数据
System.out.println(list.get(1));
// 输出元素
System.out.println(list);
1.4、遍历 List 集合
1.4.1、迭代器遍历集合
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 通过迭代器遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
1.4.2、下标遍历集合
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 通过下标遍历集合
for (int i = 0; i< list.size();i++){
String s = list.get(i);
System.out.println(s);
}
1.4.3、增强 for
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 增强 for
for (String s : list){
System.out.println(s);
}
1.5、并发修改异常
-
并发修改异常:
ConcurrentModificationException -
原因:
-
迭代器遍历过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致。
-
代码:
// 创建 List 集合对象 List<String> list = new ArrayList<>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); Iterator<String> it = list.iterator(); while (it.hasNext()){ String s = it.next(); if (s.equals("world")){ list.add("javaee"); } } System.out.println(list);
-
-
解决方法:
-
用 for 循环遍历,软后用集合对象做对应的操作即可。
-
代码:
// 创建 List 集合对象 List<String> list = new ArrayList<>(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); for (int i = 0; i < list.size(); i++) { String s = list.get(i); if (s.equals("world")){ list.add("javaee"); } } System.out.println(list);
-
1.6、Listlterator 列表迭代器
1.6.1、Listlterator 列表迭代器概述
- Listlterator 列表迭代器
- 通过 List 集合的 listlterator() 方法得到,所以说它是 List 集合特有的迭代器。
- 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。
1.6.2、Listlterator 常用方法
| 方法名 | 说明 |
|---|---|
| E next() | 返回迭代中的下一个元素 |
| boolean hasNext() | 如果迭代具有更多元素,则返回 true |
| E previous() | 返回列表中的上一个元素 |
| boolean hasPrevious() | 如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回 true |
| void add(E e) | 将指定的元素插入列表 |
1.6.2.1、next()、hasNext() 方法
- next():返回迭代中的下一个元素。
- hasNext():如果迭代具有更多元素,则返回 true。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 获取列表迭代器
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()){
String s = lit.next();
System.out.println(s);
}
1.6.2.2、previous()、hasPrevious() 方法
- previous():返回列表中的上一个元素。
- hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回 true。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 获取列表迭代器
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()){
String s = lit.next();
System.out.println(s);
}
System.out.println("--------");
// 此循环需要需要先正向遍历集合,在反方向遍历集合
while (lit.hasPrevious()){
String s = lit.previous();
System.out.println(s);
}
1.6.2.3、add(E e) 方法
- add(E e):将指定的元素插入列表。
// 创建 List 集合对象
List<String> list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 获取列表迭代器
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()){
String s = lit.next();
if (s.equals("world")){
// 使用列表迭代器的 add() 方法
lit.add("javaee");
}
}
System.out.println(list);
1.7、List 集合子类特点
- List 集合常用子类:ArrayList,LinkedList
- ArrayList:底层数据结构是数组,查询快,增删慢。
- ArrayList 创建对象:
ArrayList<String> array = new ArrayList<>();
- ArrayList 创建对象:
- LinkedList:底层数据结构是链表,查询慢,增删快。
- LinkedList 创建对象:
LinkedList<String> link = new LinkedList<>();
- LinkedList 创建对象:
- ArrayList:底层数据结构是数组,查询快,增删慢。
1.8、LinkedList 集合的特有方法
| 方法名 | 说明 |
|---|---|
| public void addFirst(E e) | 在该列表开头插入指定的元素 |
| public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
| public E getFirst() | 返回此列表中的第一个元素 |
| public E getLast() | 返回此列表中的最后一个元素 |
| public E removeFirst() | 从此列表中删除并返回第一个元素 |
| public E removeLast() | 从此列表中删除并返回最后一个元素 |
1.8.1、addFirst(E e),addLast(E e) 方法
- addFirst(E e):在该列表开头插入指定的元素。
- addLast(E e):将指定的元素追加到此列表的末尾。
// 创建 LinkedList 对象
LinkedList<String> link = new LinkedList<>();
// 添加元素
link.add("hello");
link.add("world");
link.add("java");
// 在列表最前面添加数据
link.addFirst("javaee");
// 在列表最后面添加数据
link.addLast("javase");
System.out.println(link);
1.8.2、getFirst(),getLast() 方法
- getFirst():返回此列表中的第一个元素
- getLast():返回此列表中的最后一个元素
// 创建 LinkedList 对象
LinkedList<String> link = new LinkedList<>();
// 添加元素
link.add("hello");
link.add("world");
link.add("java");
// 返回此列表中的第一个元素
System.out.println(link.getFirst());
// 返回此列表中的最后一个元素
System.out.println(link.getLast());
System.out.println(link);
1.8.3、removeFirst(),removeLast() 方法
- removeFirst():从此列表中删除并返回第一个元素
- removeLast():从此列表中删除并返回最后一个元素
// 创建 LinkedList 对象
LinkedList<String> link = new LinkedList<>();
// 添加元素
link.add("hello");
link.add("world");
link.add("java");
// 从此列表中删除并返回第一个元素
System.out.println(link.removeFirst());
// 从此列表中删除并返回最后一个元素
System.out.println(link.removeLast());
System.out.println(link);

浙公网安备 33010602011771号