【JAVA】简述集合

目录

Collection 接口

ArrayList 类

LinkedList 类

HashSet 类

LinkedHashSet 类

TreeSet 类

Map 集合

HashMap 类


集合是一种对象容器,用于存放对象。


Collection 接口

Collection 是集合的顶层接口,常用方法有:

  1. add 向集合中添加元素
  2. clear 清空集合中所有元素
  3. contains 判断集合是否包含某个元素
  4. isEmpty 判断集合是否为空
  5. remove 移除集合中元素,返回boolean类型,如果集合中不包含次元素,则删除失败
  6. size 返回集合中元素的个数
  7. toArray 将集合转换成数组
  8. addAll 向一个集合中添加另一个集合
  9. containsAll 判断一个集合中是否包含另一个集合
  10. removeAll 从一个集合中移除另一个集合

Collection 工具类:

  1. Collections.reverse ( List < ? >   list ) 反转
  2. Collections.shuffle ( List < ? >   list ) 打乱顺序
  3. Collections.sort ( List < ? >   list ) 排序(字典顺序)

ArrayList 类

常用方法:

  1. add ( int index, E element ) 在集合指定下标位置添加,index可省略
  2. remove ( int index ) 删除
  3. set ( int index, E element ) 修改指定下标位置元素
  4. get ( int index ) 获取
  5. clear ( ) 全部清除
  6. 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 集合

特点:

  1. Map 集合是双元素集合,由 key value 组成。称之为键值对
  2. 键的特点:无序,无下标,不重复
  3. 值的特点:无序,无下标,可重复


HashMap 类

常用方法:

  1. put ( K  key, V  value )  添加
  2. get ( Object  key )  获取
  3. Set < K > keySet = 集合名称.keySet ( )  返回集合所有 key 值
  4. Collection < V > values = 集合名称.values ( )  返回集合所有 value 值
  5. Set < Entry < K,V >> entrySet = 集合名称.entrySet ( )  返回集合所有 key 与 value 值
  6. boolean containsKey ( Object  key )  是否存在 key
  7. boolean containsValue ( Object  value )  是否存在 value
  8. remove ( Object  key )  删除
  9. size ( )  长度

底层实现原理:

数组 + 链表 + 红黑树

数组初始值为16位,链表到8位,超过8位转变为红黑树存储,扩容为逻辑左移一位

16 << 1  即为16 * 2^1 = 32 

(有点过于简洁了。。)

  • 35
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值