【Java基础篇】List接口

1. List

1. List特点

  • 元素有序,可重复。
  • 我们主要学习三种:ArrayListVectorLinkedList
  • 这三种都是List接口的实现类,使用上完全一样,只是实现原理不同,效率不同。
    List集合判断元素是否相同,依据是元素的equals方法。

1.2 ArrayList

  • 底层数组实现
  • 查找快,增删慢
  • 线程不安全

1.3 Vector

  • ArrayList基本一样
  • 线程安全(线程同步),效率低

1.4 LinkedList

  • 底层链表实现
  • 增删块,查找慢
  1. LinkedList:特有方法:

    • addFirst();
    • addLast();
    • getFirst();
    • getLast();
    • 获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
    • removeFirst();
    • removeLast();
    • 获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
  2. 在JDK1.6出现了替代方法。

    • offerFirst();
    • offerLast();
    • peekFirst();
    • peekLast();
    • 获取元素,但不删除元素。如果集合中没有元素,会返回null。
    • pollFirst();
    • pollLast();
    • 获取元素,但是元素被删除。如果集合中没有元素,会返回null。

1.5 存取元素

  • List集合元素存取方法一致
  • 使用add()方法增加元素
  • 由于List集合有序,可以使用get()方法获取元素
  • 元素的迭代(Iterator)
    • 通过集合对象的iterator()方法获得迭代器Iterator
    • 通过Iterator迭代器的hasNext()方法判断是否存在下一个元素
    • 通过Iterator迭代器的next()方法获取下一个元素
  • 元素的迭代(Enumeration)
    • 迭代Vector集合中的元素可以使用Enumeration
    • 通过EnumerationhasMoreElements()方法判断是否还有元素
    • 通过EnumerationnextElement()方法返回下一个元素
Collection
	|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
		|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
		|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
		|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
	|--Set:元素是无序,元素不可以重复。、

List:
​ 特有方法。凡是可以操作角标的方法都是该体系特有的方法。

  • add(index,element);
  • addAll(index,Collection);

  • remove(index);

  • set(index,element);
  • get(index):
  • subList(from,to);
  • listIterator();
  • int indexOf(obj):获取指定元素的位置。
  • ListIterator listIterator();

List集合特有的迭代器。ListIteratorIterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator

该接口只能通过List集合的listIterator方法获取。

/*Collection  容器:存储对象的对象
 *    Set
 *       ArrayList:有顺序,可重复,底层实现用数组实现的存储,特点:查询效率高,增删除
 *       效率低,thread不安全.但是一般使用ArrayList
 *       数组长度是有限的,而ArrayList是可以存放任意数量的对象,长度不受限制
 * */
public class  ArrayListTest {


    public static void main(String[] args) {
        List<String> list=new ArrayList<String>(-1);

    }

}
/*Collection  容器:存储对象的对象
 *    Set
 *       LinkedList:底层用双向链表实现的存储.特点:查询效率低,增删效率高,thread不安全.
 * */
public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<Object> list = new LinkedList<>();
        list.add(0,"wo");
        list.add(1,1);
        list.add(2,'a');
        System.out.println(list.get(2));
        for (Object o:list
             ) {
            System.out.println(o);
        }
    }
}
/*Collection  容器:存储对象的对象
 *    Set
 *       Vector:底层是用数组实现的List,和ArrayList底层实现一样,相关的方法都加的同步检查  synchronized
 *       因此 thread安全,效率低
 * */
public class VectorTest {

  public static void main(String[] args) {
    List<String>  list=new Vector<String>();
    list.add("A");
    list.add("B");
    list.add("C");
    list.add("D");
    list.add("E");
    list.add("F");
    for (String  l:list
         ) {
      System.out.println(l);
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李熠漾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值