A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© kkkkkccccc 中级黑马   /  2015-7-27 22:26  /  340 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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:
















评分

参与人数 1黑马币 +2 收起 理由
Miss.H + 2 赞一个!

查看全部评分

4 个回复

倒序浏览
楼主加油!赞
回复 使用道具 举报
加油    顶顶!!!!!
回复 使用道具 举报
/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~
回复 使用道具 举报
哈希值不同横向添加,相同就竖向添加变成桶/(ㄒoㄒ)/~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马