ArrayList,LinkList,HashMap
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值,这样的话就用到了链表结构,
之所以这么复杂还是为了提升性能,以为键值对无法像单纯的以数组实现的容器一样,那么方便的进行各种操作,这样可大大提高效率。