赞
踩
java 容器分为两大类,集合序列 和 键值对。其中 Collection 是所有集合继承的最顶层接口,其中声明的方法有对集合的操作的 增删改查等,所有具体的集合类都继承这个接口。例如 ArrayList, HashSet 等。
Collections 是包装类,,其中包含很多静态方法,理解为操作集合的工具类。例如:add() sort() 等。
java 容器分为两大类,集合序列 和 键值对,其中 List 、Set 属于集合序列.
List 存储有序的、可重复的数据
Set 存储无序的(TreeSet 除外),不可重复的数据
Map 存储无序的(TreeMap除外),key 必须唯一不可重复,value 可以重复。
ArrayList 和 LinkedList 是 List 类的子类,因此 List 接口 和 Collection 接口共同支持的是 2者的
相同点:
内部实现的不同点:
ArrayList | LinkedList | |
---|---|---|
底层数据结构 | 动态数组 | 双向链表 |
按照下标随机访问 | 支持 | 不支持 |
末尾处插入数据时间复杂度 | O(1) | O(1) |
指定index处插入数据时间复杂度 | O(n) | O(n) |
是否需要扩容 | 需要动态扩容 | 不需要,每次只是新建 Node 节点 |
插入和删除LinkedList 会比 ArrayList 快一些,即使都是 O(n),但是ArrayList 还涉及到扩容:
强调:使用map接口的实现类时,切记不要修改key的属性值,否则就会找不到key 所对应的 value值
HashMap 效率最高
需要针对 key 进行排序时使用 TreeMap
需要保证插入的元素有序时使用 LinkedHashMap
因为 Set 的底层结构是 Map ,所以三者的特点和使用场景可以参考HashMap 和 TreeMap 和 LinkedHashMap ,需要注意的是,Set 中元素是不允许重复的(Set 的值是底层时存储在 Map 的 Key 中的,key 是不能重复的)。
我们常用的容器都是线程不安全的,线程安全的容器按照分类如下
List :Vector、Stack
Map: Hashtable
Set:
JDK 1.5 之后随着 Java. util. concurrent 并发包的出现,它们也有了自己对应的线程安全类,比如 HashMap 对应的线程安全类就是 ConcurrentHashMap。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。