标签:表数据 code 表数 重要 contains 双向链表 直接 容量 本质
一、ArrayList与LinkedList
基本概念:List是一个接口,Arraylist和LinkedList是它的两个实现类,只是实现的方式不一样。我在“单链表java实现”一文中已经对单链表的结构和基本方法进行了实现,这里要说的LinkedList是java封装好的双向链表数据结构,而ArrayList是用数组实现的,它不是真正的链表,在初始化的时候它先对数组设置一个初始容量,当数组空间不够的时候,它会重新构建一个容量更大的数组,然后把先前的元素拷贝进去。粗略的来讲,ArrayList和LinkedList本质上的区别就是数组和列表这两种数据结构的区别。
大致区别:
忽略特殊情况,一般来讲,两者有以下区别
1.ArrayList是基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.查找元素/读取数据:对于随机访问get和set,ArrayList性能优于LinkedList,ArrayList直接根据下标即可访问,而LinkedList遍历则要一步一步的移动指针。
3.新增/删除操作:add和remove,LinedList比较占优势,其时间主要耗费在了移动指针上。而ArrayList添加需要将元素后移,删除需要将元素前移,移动数据比较耗时。
二、LinkedList结构
LinkedList是一种双向链表结构,如图所示。
LinkedList包含两个重要的成员:header 和 size。header是双向链表的表头,它是双向链表节点所对应的类Entry的实例。size是双向链表中节点的个数。
Entry中包含成员变量: previous, next, element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。
三、LinkedList API
1 LinkedList的API 2 boolean add(E object) 3 void add(int location, E object) 4 boolean addAll(Collection<? extends E> collection) 5 boolean addAll(int location, Collection<? extends E> collection) 6 void addFirst(E object) 7 void addLast(E object) 8 void clear() 9 Object clone() 10 boolean contains(Object object) 11 Iterator<E> descendingIterator() 12 E element() 13 E get(int location) 14 E getFirst() 15 E getLast() 16 int indexOf(Object object) 17 int lastIndexOf(Object object) 18 ListIterator<E> listIterator(int location) 19 boolean offer(E o) 20 boolean offerFirst(E e) 21 boolean offerLast(E e) 22 E peek() 23 E peekFirst() 24 E peekLast() 25 E poll() 26 E pollFirst() 27 E pollLast() 28 E pop() 29 void push(E e) 30 E remove() 31 E remove(int location) 32 boolean remove(Object object) 33 E removeFirst() 34 boolean removeFirstOccurrence(Object o) 35 E removeLast() 36 boolean removeLastOccurrence(Object o) 37 E set(int location, E object) 38 int size() 39 <T> T[] toArray(T[] contents) 40 Object[] toArray()
标签:表数据 code 表数 重要 contains 双向链表 直接 容量 本质
原文地址:https://www.cnblogs.com/darlinFly/p/9327729.html