黑马程序员技术交流社区

标题: set的概述 [打印本页]

作者: kkkkkccccc    时间: 2015-7-27 22:26
标题: set的概述
2,Set : 无序,元素唯一不重复
方法和collection一致


     因为无序,不能通过索引操作,不提供普通get/set方法,所以不能用普通for循环来遍历,只能通过迭代器和增强for循环遍历.尽管取出顺序无序,底层存储一定是按照某种顺序

HashSet:存储自定义对象.只能保证元素唯一性,并不能排序
///需求:如果我们认为一个对象如果成员变量值都相同,则为同一个对象.
如何保证元素的唯一性呢.
他是通过两个方法来保证的:hashcode() 和 equals()
首先判断对象的hashcode()值是否相同
相同 :
就判断equals(),看返回值是true还是false
True:元素有重复 该元素就不添加到集合
False:元素不重复  就添加到集合
不相同 : 就直接添加到集合中

那么这样就保证了hashset的唯一值

流程:
//创建集合对象
//创建元素对象
//添加元素
//遍历

重写equals
方式一:但是并不能去掉???





HashSet底层数据结构:哈希表.
哈希表:根据哈希算法存储的,存储的就是对象的哈希值.
哈希值(哈希码值) 指的是通过hashCode()方法获取的值,跟地址值没有关系。
只不过默认的hashCode()方法内部得到的结果是通过地址值生成的,如果我们重写了就        按照我们重写的方式生成哈希值!(效率低)

哈希值不同横向添加,相同就竖向添加变成桶/(ㄒoㄒ)/~~
哈希桶用equals()比较用的是就近原则.s3先与s2比较,再与s1比较
  

尽可能让hashcode值不相同


手写两遍hashcode和equals方法,明白原理,尽管可以自动生成



----------------------------------------------------------------------------------------------------------------------

TreeSet  可以对元素进行排序,保证数据的唯一
使用元素的自然顺序(A-Z)对元素进行排序,或者根据创建set时提供的comparator进行排序,具体取决于使用的构造方法.

类型转换异常

(原因 : 需要实现comparable接口才能拥有comparable的特性)

1)  自然顺序,无参构造,(实现接口camparable,并重写接口的compareTo方法)


Demo1:

Demo2:

















作者: Ruby    时间: 2015-7-27 22:29
楼主加油!赞
作者: wanghua1    时间: 2015-7-27 23:55
加油    顶顶!!!!!
作者: Miss.H    时间: 2015-7-28 22:40
/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~
作者: Miss.H    时间: 2015-7-30 23:57
哈希值不同横向添加,相同就竖向添加变成桶/(ㄒoㄒ)/~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2