java知识学习30-集合2

Set集合:是一个接口,可通过常用实现类hashSet运用功能。

  Set集合特点:不包含重复的元素;没有带索引的方法,所以不能用for循环实现遍历,可通过iterator迭代器和增强for循环实现遍历;不保证存放元素的顺序,可能与存入的顺序不一致。

 

哈希值:是JDK根据对象的地址或字符串或数字算出来的int类型的数值。

  

 

 

  HashSet集合概述和特点:继承Set集合并实现该集合接口。

    1.底层数据结构是哈希表;

    2.对集合的迭代顺序不做保证,即存储和取出的顺序不一定一致;

    3.没有带索引的方法,所以不能用for循环遍历

    4.由于是Set集合,所以是不包含重复的元素。

 

  HashSet集合保证元素不重复,可以查看该集合的add方法的源码分析;如下图分析

    

 

哈希表:

  

 

  下图为采用数组+链表实现的逻辑方式:

    1.HashSet集合默认初始容量为16;

    2.计算每个需要存储元素的哈希值,通过hashCode方法获取;

    3.通过哈希值对16取余,根据余数将元素放到对应的位置。若位置为空则直接放入,若已经有元素了则比较哈希值,不同则通过链表方式放入已有元素下面;哈希值相同再通过equals比较值是否相同,都相同则去重该元素不放入,值不同则也是通过链表方式放入已有元素下面。

    

 

LinkedHashSet集合的概述和特点:由哈希表和链表实现的set接口。

  

 

 

TreeSet集合概述:间接继承了set集合,元素是有序排列的集合,但不是按存储和取出的顺序,而是按照一定的规则的排序,具体排序方式取决于构造方法。

  元素的自然排序主要通过Comparable接口实现,所以如果元素是自定义类型一般是要实现该接口才能自然排序,不然会报类型转换错误ClassCastException。

  

  Comparable的使用:看compareTo方法返回的什么数据而进行排序,为0则表示每个数都是重复的,为1则表示后一个存储的比前一个大(升序),为-1则表示后一个存储的前一个小(降序)

    

 

   Comparator的使用:作为比较器,作为入参可用在TreeSet(Comparator comparator)中实现排序规则,主要也是重写compareTo方法。

    

 

posted @ 2021-04-12 08:00  那种意境  阅读(40)  评论(0编辑  收藏  举报