自己看了很多相关资料,自己整理的部分内容,希望大家多多斧正,有遗漏的地方可以直接指出来
ArrayList和linkedlist的区别及应用场景?
Arraylist:
- 底层是动态数组
- 查询速度较快(有具体的索引下标可以直接获取对应的值)
- 插入删除效率低(要删除或插入的值后所有数据需要向前或向后移动)
linkedlist
- 底层是双向链表
- 查询效率较慢(需要遍历整个链表,先判断值是在前半部分还是后半部分)
- 插入删除效率高(只需要将指针执行需要插入的元素或其下一个元素即可)
ArrayList适合查询比较频繁的场景;linkedlist适合插入删除比较频繁的场景
HashMap、linkedhashMap、treeHashMap的区别?
相同点:都是线程不安全的
不同点:
HashMap:
- 底层是数组+链表+红黑树(jdk1.8后链表深度大于8时转为红黑树);
- 无序的
linkedHashMap:
- 基于HashMap加了一个双向链表(用于排序)
- 有序的(通过链表实现排序,默认是插入顺序)
TreeMap:
- 底层是红黑树
- 有序的(默认是按key升序排序,也可以自定义排序{要实现Comparator接口,进行比较排序})
一般情况hashMap的效率比linkedHashMap高,但当hashMap容量很大时比LinkedHashMap高
数据量很大时:
1.key是随机的情况下获取map的value时的性能表现 HashMap>LinkedHashMap>TreeMap
下面是找的一个HashMap/linkedHashMap/treeMap的性能比较案例
https://www.cnblogs.com/zhjh256/p/11626524.html