List中常用的实现类源码查看

本文详细介绍了Java中的List接口的三个主要实现类:ArrayList、LinkedList和Vector。ArrayList基于动态数组,查询快但增删慢;LinkedList采用链表结构,适合头尾操作和插入指定位置,但查询效率低;Vector与ArrayList类似,但线程安全,效率较低。
摘要由CSDN通过智能技术生成

原文地址 List中常用的实现类详解

List 接口

源码中的描述:An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.
有序集合,通过此接口可以精准地插入元素。可以通过整数索引查找元素。

特有的函数

 
//排序,根据实现Comparator接口
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
//根据索引获取元素
E get(int index);
//替换原来的元素,返回值是原来的值
E set(int index, E element);
//插入
void add(int index, E element);
//删除
E remove(int index);
//返回某元素的索引值
int indexOf(Object o);
int lastIndexOf(Object o);
//从索引开始的迭代器
ListIterator<E> listIterator(int index);
//返回此列表中指定的fromIndex (包含) 和toIndex (包含) 之间的部分视图。(如果fromIndex和toIndex相等,则返回的列表为空。)即[from,to)
List<E> subList(int fromIndex, int toIndex);

List中常用的实现类

一、ArrayList

底层数据结构是数组,查询快,增删慢,线程不安全,效率高

 
//存储元素
transient Object[] elementData;
...没了..

最常用吧。

二、LinkedList

底层数据结构是链表,查询慢,增删快,线程不安全,效率高

 
//节点:双向链表
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
//头结点
transient Node<E> first;
//尾节点
transient Node<E> last;
public E getFirst();
public E getLast() ;
public E removeFirst() ;
public E removeLast();
public void addFirst(E e)
public void addLast(E e) {
linkLast(e);
public boolean contains(Object o);

对于头尾操作频繁的化LinkedList更合适
删除也更加快,但查询需要遍历链表,所以更慢

三、Vector

底层数据结构是数组,这就是常说的向量,查询快,增删慢,线程安全,效率低

 
//底层是数组
protected Object[] elementData;
//函数都是synchronized修饰的,所以线程安全,查询也快,但是比ArratList慢
public Enumeration<E> elements();//相当于迭代器
public synchronized E elementAt(int index);//get函数
public synchronized void setElementAt(E obj, int index)//set
public synchronized void removeElementAt(int index)
public synchronized void insertElementAt(E obj, int index) //add
public synchronized void addElement(E obj);

特点是线程安全吧

总结

List中元素有放入顺序,元素可重复,
ArrayList是实现了基于动态数组的数据结构,地址是连续的,所以查询速度快,但是删除和插入元素效率较低。最常用的。
LinkedList基于链表的数据结构,地址是任意的,节点空间都是散列的,对于删除和插入操作,LinedList效率较高。LinkedList 适用于要头尾操作或插入指定位置的场景。但是查询的话需要移动指针,遍历,效率较慢
Vector和ArrayList一样,是实现了基于动态数组的数据结构,但是是线程同步的,效率很低。当然,需要线程安全的话还是要使用Vector

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值