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<>();
    • LinkedList:底层数据结构是链表,查询慢,增删快。
      • LinkedList 创建对象:LinkedList<String> link = new LinkedList<>();

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);
posted @ 2021-02-20 15:43    阅读(276)  评论(0)    收藏  举报