集合框架之Set

与上篇章相同,我们先来了解集合框架中Set的分支

集合框架        

Set集合

Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。

1.特点

 无序

Set集合数据添加的顺序和取出的顺序不一致

 唯一

set集合数据不允许添加重复数据

问题:存储对象,验证Set集合唯一性

查看结果:存储相同属性的User对象时,Set集合并未满足唯一性要求,打印输入了相同对象信息。 输出格式:类的全路径名+@+十六进制内存地址

 

问题原因:判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现;而在没有重写equals方法之前默认比较的是Object(引用类型),实际上比较的是内存地址。

 重写User对象中的equals方法,比较User对象中的属性。

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
    	return true;
    if (obj == null)
    	return false;
    if (getClass() != obj.getClass())
    	return false;
    User other = (User) obj;
    if (id == null) {
        if (other.id != null)
        	return false;
    } else if (!id.equals(other.id))
    	return false;
    if (name == null) {
    	if (other.name != null)
    	return false;
    } else if (!name.equals(other.name))
    	return false;
    return true;
}

 当比较对象的属性相同时,已存在的对象信息不会被覆盖,而是过滤了。 结论:先比较hashcode值是否相同,再比较equals;

 2.遍历方式

 foreach遍历

 迭代器

常见的实现类

 HashSet

  • 它不允许出现重复元素;

  • 不保证集合中元素的顺序

  • 允许包含值为null的元素,但最多只能有一个null元素。

  • HashSet的实现是不同步的

 LinkedHashSet

  • 哈希表和链表实现Set接口,具有可预测的迭代次序;

  • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的。

  • 由哈希值保证元素唯一,也就是说没有重复的元素

  TreeSet

TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。

 java.lang.Comparable自然比较接口

java.util.Comparator比较器

今日篇章到此结束,希望大家先理解什么是集合框架以及集合框架的几个分支再进行学习,关注博主,每日更新^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值