底层数据结构: Arraylist 底层使?的是 Object 数组;LinkedList 底层使?的是 双向链表 数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。)
插入和删除: Arraylist 在内存中是一块连续的内存,如果插入或删除时需要移动内存。LinkedList 插入时不需要移动内存,只需要改变引用指向即可。
随机访问: Arraylist支持随机访问,LinkedList不支持随机访问。
应用场景: Arraylist适合查询较多的场景,因为支持随机访问,查询快。LinkedList适合插入、删除频繁的场景,因为删除插入操作简单,而查询需要遍历链表。
TreeMap和LinkedHashMap
LinkedHashMap
底层数据结构: LinkedHashMap是在hashmap结构的基础上,增加了?条双向链表,使得上?的结构可以保持键值对的插?顺序。同时通过对链表进行相应的操作,实现了访问
顺序相关逻辑。
特点与应用场景:
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。
TreeMap
https://blog.csdn.net/weixin_34384681/article/details/92004747
底层数据结构: TreeMap实现了SortMap。TreeMap 底层结构为红黑树,红黑树的Node排序是根据Key进行比较。每次新增删除节点,都可能导致红黑树的重排。
特点与应用场景: TreeMap能够根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。 因为数据结构是红黑树,所以增删改查的时间按复杂是O(logn)。