List集合

1. List接口介绍

java.util.List口继承自Collection接口,是单列集的一个重要分支。一般将实现了List接口的对象称为List集合

 

List接口特点:

LIst集合的所有元素以线性方式进行存储。

它是一个存取有序的集合。

它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

List集合类中元素有序、且可重复。这就像银行门口客服,给每一个来办理业务的客户分配序号:第一个来的是“张三”,客服给他分配的是0;第二个来的是“李四”,客服给他分配的1;以此类推,最后一个序号应该是“总人数-1”。

注意:

List集合关心元素是否有序,而不关心是否重复,请大家记住这个原则。例如“张三”可以领取两个号

 

2. List接口中的常用方法

List除了从Collection集合继承的方法外,List集合里添加了一些根据索引来操作集合元素的方法。

(1)添加元素

  • void add(int index, E ele)
  • boolean addAll(int index, Collection<? extends E> eles)

 

 1 public class Demo17 {
 2     public static void main(String[] args){
 3         //List接口:有下标,有序(新增顺序和遍历顺序一致),允许重复记录
 4         //List接口的独有方法
 5         //创建List集合对象
 6         List list = new ArrayList();
 7         //往尾部添加指定元素
 8         list.add("红大娃");
 9         list.add("橙二娃");
10         list.add("黄三娃");
11         System.out.println(list);
12 
13         List list2 = new ArrayList();
14         list2.add("绿四娃");
15         list2.add("蓝五娃");
16         System.out.println(list2);
17 
18         list.addAll(list2);
19         System.out.println(list);  //把list2集合中的所有元素,导入到list中
20 
21         List list3 = new ArrayList();
22         list3.add("老爷爷");
23         list3.add("穿山甲");
24         list.addAll(1,list3); // 指定索引新增一个整个集合中所有的元素
25         System.out.println(list);
26     }
27 }

 

 

 

 

 

 

运行结果:

 

1 [红大娃, 橙二娃, 黄三娃]
2 [绿四娃, 蓝五娃]
3 [红大娃, 橙二娃, 黄三娃, 绿四娃, 蓝五娃]
4 [红大娃, 老爷爷, 穿山甲, 橙二娃, 黄三娃, 绿四娃, 蓝五娃]

 

 

 

 

 

 

 

(2)获取元素

  • E get(int index)

  • List subList(int fromIndex, int toIndex)

 1 public class Demo17 {
 2     public static void main(String[] args){
 3         List list = new ArrayList();
 4         //往尾部添加指定元素
 5         list.add("红大娃");
 6         list.add("橙二娃");
 7         list.add("黄三娃");
 8         list.add("绿四娃");
 9         list.add("蓝五娃");
10         System.out.println(list);
11 
12         String s = (String)list.get(1);  //获取指定下标元素
13         System.out.println(s);
14 
15         System.out.println(list.subList(2, 4));   // 获取指定下标范围内的元素
16     }
17 }

 

 运行结果:

[红大娃, 橙二娃, 黄三娃, 绿四娃, 蓝五娃]
橙二娃
[黄三娃, 绿四娃]

 

 

(3)获取元素索引

  • int indexOf(Object obj)

  • int lastIndexOf(Object obj)

 1 public class Demo17 {
 2     public static void main(String[] args){
 3         List list = new ArrayList();
 4         //往尾部添加指定元素
 5         list.add("红大娃");
 6         list.add("橙二娃");
 7         list.add("黄三娃");
 8         list.add("橙二娃");
 9         list.add("绿四娃");
10         System.out.println(list);
11 
12         System.out.println(list.indexOf("黄三娃"));     //获取"黄三娃"下标
13         System.out.println(list.lastIndexOf("橙二娃"));   // 返回对象"橙二娃"在List集合中最后一次出现的位置索引
14     }
15 }

 

运行结果:

[红大娃, 橙二娃, 黄三娃, 橙二娃, 绿四娃, 蓝五娃]
2
3

 

 

 (4)删除和替换元素

  • E remove(int index)

  • E set(int index, E ele)

 1 public class Demo17 {
 2     public static void main(String[] args){
 3         List list = new ArrayList();
 4         //往尾部添加指定元素
 5         list.add("红大娃");
 6         list.add("橙二娃");
 7         list.add("黄三娃");
 8         list.add("橙二娃");
 9         list.add("绿四娃");
10         System.out.println(list);
11 
12         System.out.println(list.remove(2));   //删除索引位置为2的元素  "黄三娃"
13         list.set(0,"葫芦小金刚");    //  "红大娃"替换为"葫芦小金刚"
14         System.out.println(list);
15     }
16 }

运行结果:

[红大娃, 橙二娃, 黄三娃, 橙二娃, 绿四娃]
黄三娃
[葫芦小金刚, 橙二娃, 橙二娃, 绿四娃]

 

3. List接口的实现类们

List接口的实现类有很多,常见的有:

ArrayList:动态数组

Vector:动态数组

LinkedList:双向链表

Stack:栈

 

4.ListIterator

List集合额外提供了一个ListIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Lterator接口,提供了专门操作List方法:

  • void add():通过迭代器添加元素到对应集合

  • void set(Object obj):通过迭代器替换正迭代的元素

  • void remove():通过迭代器删除刚迭代的元素

  • boolean hasPrevious():如果以逆向遍历列表,往前是否还有元素。

  • Object previous():返回列表中的前一个元素。

  • int previousIndex():返回列表中的前一个元素的索引

  • boolean hasNext()

  • Object next()

  • int nextIndex()

 

 

 

 

 

 

 

posted @ 2021-11-18 10:42  白森  阅读(59)  评论(0编辑  收藏  举报