集合之四:List接口

时间:2022-04-03 19:21:41

  查阅API,看List的介绍。有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

看完API,我们总结一下:

List接口:

  •   它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
  •   它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
  •   集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

 

List接口的常用子类有:

  •  ArrayList集合(线程不安全)
  •  LinkedList集合(线程不安全)
  •  Vector集合(线程安全)

List接口的常用方法:

  

public class ListDemo01 {

public static void main(String[] args) {

function2();

}

/*
* set(int index,E)
* 修改指定索引上的元素
* 返回被修改之前的元素
*/
public static void function2(){
List
<Double> list = new ArrayList<>();
list.add(
1.1);
list.add(
1.2);
list.add(
1.3);
list.add(
1.4);

double d=list.set(0, 9.0);
/*
* 与add(index,ele)不同 不能这样添加元素
* java.lang.IndexOutOfBoundsException:
*/
double d1=list.set(4,2.0);//这一句会报 java.lang.IndexOutOfBoundsException:
System.out.println(d1+"==="+list);
}
/*
*
* E remove(int index)
* 移除指定索引上的元素
* 返回被删除的元素
*
*/
public static void function1(){
List
<Double> list = new ArrayList<>();
list.add(
1.1);
list.add(
1.2);
list.add(
1.3);
list.add(
1.4);

System.out.println(list.remove(
1));
System.out.println(list);
}

/*
* add(int index,E)
* 将元素插入到列表的指定索引上
*/
public static void function(){
List
<String> list=new ArrayList<>();
list.add(
"1");
list.add(
"2");
list.add(
"3");
list.add(
"4");
System.out.println(list);

/*带有索引的操作 要注意索引越界的问题
* java.lang.IndexOutOfBoundsException
*/
list.add(
5,"shsxt");
System.out.println(list);
}
}

List集合存储数据的结构:

  List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,供给我们在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表。

堆栈: 先进后出  栈的入口、出口的都是栈的顶端位置

队列: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素) 队列的入口、出口各占一侧。

数组: 查找快,增删慢, 数组元素在内存地址上是连续的

链表: 多个节点之间,通过地址进行连接 ,查找元素慢 ,增删元素快

List接口的实现类:

  • ArrayList

ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

  • LinkedList  

LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。

集合之四:List接口

 1 package com.shsxt.lisa;
2
3 import java.util.LinkedList;
4
5 /*
6 * LinkedList 链表集合的特有功能
7 * 增删快 查询慢 底层是链表
8 *
9 * 子类的特有功能 不能使用多态
10 */
11 public class LinkedListDemo01 {
12
13 public static void main(String[] args) {
14 function02();
15 }
16
17
18 /*
19 * addFirst(E)
20 * addLast(E)
21 */
22 public static void function() {
23 //子类的特有功能 不能使用多态 所以这里不能使用list
24 LinkedList<String> list = new LinkedList<String>();
25 list.addLast("元首");
26 list.add("001");
27 list.add("002");
28
29 list.addFirst("张二狗");
30 System.out.println(list);
31
32 }
33
34 /*
35 *
36 * getFirst(E) getLast(E)
37 */
38 public static void function02(){
39 LinkedList<String> list = new LinkedList<String>();
40 list.addLast("元首");
41 list.add("001");
42 list.add("002");
43 /*
44 * 但是这个获取方式有一些弊端 思考下列场景
45 */
46 list.clear();//将容器元素清空后 java.util.NoSuchElementException
47 //解决方法 if(link.size()!=0) 或者 if(link.isEmpty())
48 System.out.println(list.getFirst());
49
50 }
51 }
  •  Vector集合

Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中提供了一个独特的取出方式,就是枚举Enumeration,它其实就是早期的迭代器。此接口Enumeration的功能与 Iterator 接口的功能是类似的。Vector集合已被ArrayList替代。枚举Enumeration已被迭代器Iterator替代。