笔记(4月30日)

来源:互联网 发布:最强网络神豪80txt下载 编辑:程序博客网 时间:2024/06/03 17:37
集合3_Set

1.HashSet
 1.1 元素顺序:元素唯一,但是无序(它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变)
 案例:创建一个HashSet集合,添加元素(String元素),测试唯一性,无序性
 

测试结果显示元素是为宜切无序的


 1.2如何保证元素的唯一性的

* 通过简单的分析,我们知道HashSet集合保证元素的唯一性和add()方法相关。
* 如何我们想深入的了解,就必须看add()方法的源码,看它的底层依赖什么内容?
*    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {...}
*    
*    左边:e.hash == hash
*     比较对象的哈希值。
*    
*    右边:((k = e.key) == key || key.equals(k))
*     左边:(k = e.key) == key
*     比较对象的地址值。
*    
*     右边:key.equals(k)
*     比较的是对象的内容是否相同。默认情况下比较的是地址值
 
结论:
底层数据结构是哈希表。
哈希表依赖两个方法:hashCode()和equals()(即重写如下方法)


执行流程:
首先判断哈希值是否相同,如果不同,就直接添加到集合。
如果相同,继续执行equals(),看其返回值,
如果是false,就直接添加到集合。
如果是true,说明元素重复不添加。


使用:
如果你看到哈希结构的集合,就要考虑可能需要重写这两个方法。
如果真要重写,自动生成即可。

画图讲解哈希表结构:是一个元素为链表的数组结构

 
 
3.TreeSet
 3.1 元素顺序:使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的 Comparator进行排序(比较器排序),

 具体取决于使用的构造方法。

 3.2 底层算法:二叉树


 案例演练:
 1.创建集合存储Integer类型的元素(20,18,23,22,17,24,19,18,24),分析如何保证元素唯一性,以及排序的规则。二叉树

 


 2.存储字符串并遍历(字母a-z排序)


 3.存入学生对象(姓名,年龄),1.按年龄排序,2.姓名排序(自然排序实现Comparable接口,并重写comparaTo()方法)


 4.创建set集合的时候,传入Comparator(比较器排序)进行排序,进行排序(比较器排序)
 



4.HashSet与TreeSet的相同点与不同点
相同点:
单列集合,元素不可重复
不同点
1. 底层存储的数据结构不同
    HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储
2.存储时保证数据唯一性依据不同
   HashSet是通过复写hashCode()方法和equals()方法来保证的,而TreeSet通过Compareable接口的compareTo()方法来保证的
3.有序性不一样
 HashSet无序,TreeSet有序


 * 这种情况的数据,属于一一对应的映射关系。这种关系的集合在java叫Map。
 * Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

 * Map接口中的方法概述
 *


 2.HashMap
 2.1元素顺序:元素顺序不可预测
 2.2底层算法:哈希算法
 2.3对键没有要求(仅仅相对于TreeMap来说)
 知识点demo演练:

 1.存入(String,Student)键:String(国籍)  值:Student


 2.存入(Student,String),键是同一个对象的时候要把之前存入的元素挤出去,想要实现这样的效果的话,

 需要重写javabean里面的hashCode()和equals()方法




0 0
原创粉丝点击