Java常见集合类学习笔记
List#
1.ArrayList Vector LinkedList区别
ArrayList和Vector底层实现基本相同,都是基于数组实现的,只是Vector的方法用synchronized
修饰;所以ArrayList是线程不安全的,Vector是线程安全的。
LinkedList底层基于双向链表实现,方法没有用synchronized
修饰,线程不安全。
2.数组和链表的区别
数组内存连续,随机访问效率高,所以查询和修改效率高;链表内存不连续,增删方便,但是查询和修改效率低;数组和链表组合,就引出了HashSet。
3.HashSet
HashSet底层是HashMap,HashSet实际就是HashMap的KeySet; 结构是数组+单向链表或者是数组+红黑树;数据存入的过程:首先对要存入的元素取 hashCode,在利用hashCode和数组长度-1做按位与(&)操作,计算出下 标;如果数组上对应下标的位置没有元素,则存入,如果有元素,则取出元素,构建 链表,并将链表替换到数组对应下标中。如果数组长度和链表长度都到达临 界值,则链表进化为红黑树。
4.LinkedHashSet
LinkedHashSet底层是LinkedHashMap, LinkedHashSet实际就是LinkedHashMap的KeySet;结构是数组+双向链表,实现有序插入
5.HashMap和Hashtable的区别
Hashtable底层是数组+单向链表,HashMap底层是数组+单向链表+红黑树。HashMap线程不安全,Hashtable线程安全。HashMap键值允许为null, Hashtable键值不允许为null。
6.Properties
Properties继承于Hashtable,操作类似。
7.TreeSet
底层是TreeMap, 可以传入比较器,进行排序
8.TreeMap
底层是红黑树,可以传入比较器,进行排序
集合实现类的选择
- Collection
- 允许重复:List
- 增删多:LinkedList
- 查改多:ArrayList(线程不安全)Vector(线程安全)
- 不允许重复:Set
- 无序:HashSet
- 排序:TreeSet
- 插入和取出顺序一致:LinkedHashSet
- 允许重复:List
- Map
- 键值无序:HashMap
- 键值排序:TreeMap
- 键值插入和取出顺序一致:LinkedHashMap
- 读取文件:Properties
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律