Java集合框架(2)

Java集合框架详解(2)

Set集合

set子接口

  • 特点:无序、无下标、元素不可重复

  • 方法:全部继承Collection

Set实现类

  • HashSet(重点)
    • 基于HashCode实现元素不重复
    • 当存入元素的哈希码相同时,会调用equlas进行确认,如结果为TRUE,则拒绝后者进入
  • TreeSet
    • 基于排列顺序实现元素不重复
    • 实现了SortedSet接口,对集合元素自动排序。
    • 元素对象的类型必须实现Comparable接口,指定排序规则
    • 通过CompareTo方法确定是否为重复元素

HashSet存储过程

HashSet补充

关于hashCode的重写

final int prime = 31;  //为什么是31而不是其他值 
//1.  31是一个质数,可以尽量减少散列冲突:   让hashCode计算出的数尽量不一样   质数:只能被1和它自身整除的数
//2.  提高执行效率:   31*i=(i<<5)-i  乘法运算可以换成移位操作

TreeSet

红黑树: 也是二叉查找树 根节点和null节点都是黑色的 为了保证平衡(简单理解)

使用:

Comparator:实现定制比较(比较器)

Map体系集合

方法:

V put (k key,v value );//将对象存入到集合中,关联键值。key重复则覆盖原值
Object get(Object key);//根据键获取对应的值
Set<K>;//返回所有key
Collection<V>value();//返回包含所有值的Collection集合
Set<Map.Entry<K,Y>>;//键值匹配的Set集合

Map接口的使用

Map集合的实现类

  • HashMap(重点):
    • JDK1.2版本,线程不安全,运行效率快;允许使用null 作为key或是value
    • 默认初始容量为16和默认加载因子(0.75)的空HashMap

HashMap源码

1 << 4 = 2^4 = 16

  1. HashMap刚创建时,table是null,节省空间,当添加第一个元素时,table容量调整为16
  2. 当元素个数大于阈值(16*0.75 = 12)时,会进行扩容,扩容后的大小为原来的两倍,目的是减少调整元素的个数
  3. jdk1.8 当每个链表长度 >8 ,并且数组元素个数 ≥64时,会调整成红黑树,目的是提高效率
  4. jdk1.8 当链表长度 <6 时 调整成链表 注意:这里的链表是单向列表不是双向列表
  5. jdk1.8 以前,链表时头插入,之后为尾插入
//刚创建hashmap之后没有添加元素 table=null size=0  目的就是节省空间

Hashtable

  • JDK1.0版本 线程安全 运行效率慢;不允许null作为key或value
  • Properties 作为Hashtable子类
    • 要求key和Value都是String 通常用于配置文件的读取

TreeMap

实现了SortedMap接口(是Map的子接口),可以对key自动排序

Collection工具类

概念:集合工具类,定义了除了存取以外的集合常用方法

方法:

public static void reverse(List<?> list);//反转集合中的元素顺序
public static void shuffle(List<?> list);//随机重置集合元素的顺序
public static void sort(List<T> list);//升序排序(元素类型必须实现Comparable接口)

posted @ 2021-03-11 14:32  弹琴的猫  阅读(37)  评论(0)    收藏  举报