ArrayList底层实现数组,这是ArrayList get()方法的源码,底层是数组
根据下标返回在数组中对应的位置 ,查询快,插入慢
// Positional Access Operations
@SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
LinkList的底层实现是双向链表,插入块,查询慢 ,下面是其add()方法的源码
可以看出是一双向链表的方式实现的
/**
* Links e as last element.
*/
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
HahsMap的底层实现是数组加链表 比如我new一个新的map Map<String,Integer> map=new HashMap<String,Integer>();
调用put的方法添加,保存的原理是,new一个数组,得出key的hashCode()码,其实就是一串数字,将这个数字当坐下标,根据这个下标将其放到对应的
位置。问题来了,key的hashCode()码可能会重复,所以,一个下标的位置上会放入几个不同的键值对,也即是map值,这样的话就用到了链表结构,
之所以这么复杂还是为了提升性能,以为键值对无法像单纯的以数组实现的容器一样,那么方便的进行各种操作,这样可大大提高效率。