首页 > 技术文章 > Java 集合:(四) List子接口

niujifei 2021-04-17 18:27 原文

一、List 接口概述

  1、鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组;

  2、List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引;

  3、List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

  4、JDK APIList接口的实现类常用的有: ArrayListLinkedListVector

  5、List 接口结构

    

 

二、常用实现类简单对比

  ArrayList、LinkedList、Vector三者的异同:

  相同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据

  不同点

    (1)ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储;

    (2)LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储;

    (3)Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储;

 

三、List 接口方法

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

  

 

   这些方法有的已经在 Collection 接口中进行了简要分析,而 List 接口继承自 Collection,因此这里只分析一些 List 特有的方法:

//在index位置插入ele元素
void add(int index, Object ele)

// 将一个集合的所有元素添加到当前集合的指定位置;
boolean addAll(int index, Collection<? extends E> c);

// 用指定的运算结果替代集合中的所有元素
default void replaceAll(UnaryOperator<E> operator);

// 用指定的 Comporator 对集合元素进行排序
default void sort(Comparator<? super E> c);

// 获取指定位置的元素
E get(int index);

// 将某个位置的元素替换为指定元素
E set(int index, E element);

// 将指定元素添加到集合的指定位置
void add(int index, E element);

// 移除指定位置的元素,移除指定index位置的元素,并返回此元素
E remove(int index);

// 某个元素在集合中(第一次出现)的位置
int indexOf(Object o);

// 某个元素在集合中最后一次出现的位置
int lastIndexOf(Object o);

// 返回元素的列表迭代器
// 相当于 list.listIterator(0)
ListIterator<E> listIterator();

// 返回元素的 listIterator(指定起始位置)
ListIterator<E> listIterator(int index);

// 获取集合的子集,返回从fromIndex到toIndex位置的子集合
List<E> subList(int fromIndex, int toIndex);

  常用方法总结:

增:add(Object obj)
删:remove(int index) / remove(Object obj)
改:set(int index, Object ele)
查:get(int index)
插:add(int index, Object ele)
长度:size()

 

四、List 的遍历方式

  1、Iterator迭代器方式

  2、增强for循环

  3、普通的循环

  4、案例

 1     @Test
 2     public void test3(){
 3         ArrayList list = new ArrayList();
 4         list.add(123);
 5         list.add(456);
 6         list.add("AA");
 7 
 8         //方式一:Iterator迭代器方式
 9         Iterator iterator = list.iterator();
10         while(iterator.hasNext()){
11             System.out.println(iterator.next());
12         }
13 
14         System.out.println("***************");
15 
16         //方式二:增强for循环
17         for(Object obj : list){
18             System.out.println(obj);
19         }
20 
21         System.out.println("***************");
22 
23         //方式三:普通for循环
24         for(int i = 0;i < list.size();i++){
25             System.out.println(list.get(i));
26         }
27 
28     }

 

  面试题:区分List中remove(int index)和remove(Object obj)

 1     @Test
 2     public void testListRemove() {
 3         List list = new ArrayList();
 4         list.add(1);
 5         list.add(2);
 6         list.add(3);
 7         updateList(list);
 8         System.out.println(list);//
 9     }
10 
11     private void updateList(List list) {
12 //        list.remove(2);
13         list.remove(new Integer(2));
14     }

 

推荐阅读