目录
集合是一种对象容器,用于存放对象。
Collection 接口
Collection 是集合的顶层接口,常用方法有:
- add 向集合中添加元素
- clear 清空集合中所有元素
- contains 判断集合是否包含某个元素
- isEmpty 判断集合是否为空
- remove 移除集合中元素,返回boolean类型,如果集合中不包含次元素,则删除失败
- size 返回集合中元素的个数
- toArray 将集合转换成数组
- addAll 向一个集合中添加另一个集合
- containsAll 判断一个集合中是否包含另一个集合
- removeAll 从一个集合中移除另一个集合
Collection 工具类:
- Collections.reverse ( List < ? > list ) 反转
- Collections.shuffle ( List < ? > list ) 打乱顺序
- Collections.sort ( List < ? > list ) 排序(字典顺序)
ArrayList 类
常用方法:
- add ( int index, E element ) 在集合指定下标位置添加,index可省略
- remove ( int index ) 删除
- set ( int index, E element ) 修改指定下标位置元素
- get ( int index ) 获取
- clear ( ) 全部清除
- indexOf ( E element ) 返回元素下标
数据结构:数组
数据结构的特点:查询快,增删慢
LinkedList 类
常用方法与 ArrayList 一致,额外有自己的向首尾添加与移除的方法。
模拟栈的数据结构:push ( ),pop ( )
模拟队列的数据结构:offer ( ),poll ( ),element ( ),peek ( )
数据结构:链表(单向链表,双向链表)
链表组成部分:数据域,指针域
数据结构特点:查询慢,增删快
HashSet 类
常用方法与 Collection 一致
特点:无序(元素不按照插入顺序排列,也不按照大小排列),无下标,不可重复
HashSet 底层去重原理:
首先会比较两个对象的hashCode的值,如果 hashCode 值不一样,则直接认为两个对象是不同的对象
如果 HashCode 值一样那么就会比较两个对象的 equals 方法, 如果 equals 方法返回 false,则表示两个对象是不同的对象,如果 equals 方法返回 true,则表示两个对象是相同的对象,则不会向 HashSet 中添加
HashSet先判断 hashcode 再判断 equals,两者都相等则认为是相同对象
LinkedHashSet 类
特点:有序,无下标,不可重复
方法和去重原理与父类一致,(不知道父类,可以去看开头的类图)
TreeSet 类
特点:字典顺序,无下标,不可重复,存储对象时,对象需要实现 Comparable 接口,重写compareTo 方法
常用方法与 HashSet 一致
TreeSet 实现原理:
在 TreeSet 存储元素时,会调用 compareTo 方法,返回值大于0升序,小于0降序,等于0去重
Map 集合
特点:
- Map 集合是双元素集合,由 key 和 value 组成。称之为键值对
- 键的特点:无序,无下标,不重复
- 值的特点:无序,无下标,可重复
HashMap 类
常用方法:
- put ( K key, V value ) 添加
- get ( Object key ) 获取
- Set < K > keySet = 集合名称.keySet ( ) 返回集合所有 key 值
- Collection < V > values = 集合名称.values ( ) 返回集合所有 value 值
- Set < Entry < K,V >> entrySet = 集合名称.entrySet ( ) 返回集合所有 key 与 value 值
- boolean containsKey ( Object key ) 是否存在 key
- boolean containsValue ( Object value ) 是否存在 value
- remove ( Object key ) 删除
- size ( ) 长度
底层实现原理:
数组 + 链表 + 红黑树
数组初始值为16位,链表到8位,超过8位转变为红黑树存储,扩容为逻辑左移一位
16 << 1 即为(16 * 2^1 = 32 )
(有点过于简洁了。。)