Collection 是Java的一种接口,它定义了Collection Framework
(集合框架)下面子类所要实现的Method
。简单地说,是一种不可实例化的接口类型,约束了子类要继承的方法。
Collection
和 Map
是Java
世界中集合类的两个主要根接口。
为什么要有Collection
在 Java1.2 之前主要的分类数据对象是Arrays, Vectors,Hashtables ,并且他们没有共同的接口。因此,虽然他们主要的实现目标都是一致的,但是却各自独立没有任何联系。
简单的说,没有一个可以统一一致的东西,把集合框架内的子类给约束起来,导致不同的类有不同的api,比如:添加操作,有些用put(),有些用addElement(),还有些传参顺序不一致,都会导致使用成本上升。(可以参考PHP,同一种实现方法有不同的命名不同的传参)
Collection的好处
- 一致性的API调用方式和传参格式。
- 减少编程心智压力。你可以不用特意为每个对象记不同的api。
- 提升编程速度和质量
Method Overview
名称 | 说明 |
---|---|
add(Object o) | 把当前对象加入集合 |
addAll(Collection o) | 把集合里面的每个对象加入当前的集合 |
clear() | 把当前集合的元素全部移除 |
contains(Object o) | 判断集合内是否有当前的元素 |
containsAll(Collection c) | 如果传入的集合所有的元素包含在当前集合则返回true |
equals(Object o) | 判断2个集合是否相等 |
hashCode() | 返回每个集合的哈希码 |
isEmpty | 判断当前集合是否为空 |
iterator() | 返回当前集合的迭代器 |
max() | 返回当前集合最大的值 |
parallelStream() | |
remove(Object o) | 移除某个元素 |
removeAll(Collection c) | 移除传入的元素包含在这个集合里面的所有元素 |
retainAll(Collection c) | 对传入的集合c和当前集合取公共元素 |
size() | 返回当前集合的元素数量 |
spliterator() | |
stream() | |
toArray() | 把当前集合转换成数组 |
ArrayList 数组
ArrayList 是一个动态的数组。ArrayList的容量大小会随着数组内的元素增加或减少做出相应的改变,ArrayList传入的泛型不能是原始类型如(int, char),需要传入父层类如(Integer,Character)。
LinkedList 链表
单向链表结构,查询的算法复杂度是O(n),而增删改是O(1)。数组与之相反
Stack 栈
栈结构,遵循“先进后出”
Priority Queue 优先队列
遵循队列的“先进先出”原则,并且由于它也是个堆(想象成经典的二叉树,但不一定有可能是多叉树),所以搜索的速度是O(logn),默认从小到大自然排序(会根据每个对象的Comparator的调用来决定大小),
HashSet
无序的不重复集合,会根据传入的对象的hashCode来检查在集合内是否是有值,如果有相同hashCode对象则不插入。
LinkedHashSet
有序的不重复集合,它的排序是根据插入的顺序来进行排序。(有点儿像不重复的Array)。
HashMap
Key: Value
格式的Map,根据给定的key(字符串类型)作为索引来查找对应的值。
Thought
ArrayList是如何扩容的?
HashMap是如何扩容的?
为什么HashMap不是线程安全的?
Reffer: https://www.geeksforgeeks.org/collections-in-java-2/**