Set概述、哈希值概述、HashSet概述(附加存储学生对象案例)、LinkedHashSet概述、TreeSet概述、Comparable和Comparator(附存储不重复随机数案例)

Set集合概述特点

所在包:java.util
public interface Set<E> 
	   extends Collection<E>            
//Set作为接口不能直接进行实例化,必须找到Set相应的实现类。
特点:不包含重复元素的集合
  Set集合中没有带索引的方法,所以不能使用普通for循环遍历

注意:
数组用Arrays类方法
集合用Collections类方法

实现代码案例:

Set<String> s = new HashSet<String>();
	s.add("hello");
	s.add("world");
	s.add("java");
	for(String c:s){
   
		System.out.print(c);        //Set对集合的迭代顺序不做任何保证
	}
输出结果:
world
java
hello

哈希值概述特点

哈希值:

  • 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
  • Object类中有hashCode()可以获取对象的哈希值:public Object hashCode()返回对象的哈希值

对象的哈希值特点:

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下(没有在类中重写hashCode()方法的情况下),不同对象的哈希值是不同的,重写hashCode()方法可以让不同对象的哈希值相同

HashSet< E >

所在包:java.util
public class HashSet<E> 
	   extends AbstractSet<E> 
       implements Set<E>,Cloneable,Serializable

特点:

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不做任何保证,也就是说不保证存储数据和取出数据的元素顺序一致
  • 没有带索引的方法,所以不能用普通for循环遍历
  • 由于是Set集合,所以在集合中不包含重复的元素

初始化格式:

HashSet<E> hs=new HashSet<E>();
注意:HashSet继承了Set接口所以可以用add、remove、clear、isEmpty、iterator(获取迭代器)等方法

HashSet是如何保证元素不相同的:

  1. 存入的元素和已经存入的元素比较哈希值
  2. 如果哈希值不同,则继续向下执行,把元素添加到集合
  3. 如果哈希值相同,则调用对象的equals方法进一步比较元素值是否相同
  4. 如果equals返回false,则会继续向下执行,把元素添加到集合
  5. 如果equals返回true,则说明元素重复,不会向下执行

图例:
Set集合中元素不重复的原因
存储学生对象案例:

public static void main(String[] args){
   
	HashSet<Student> h = new HashSet<Student>();
	Student s1=new Student("张三",123,99);
	Student s2=new Student("李四",456,98);
	Student s3=new Student("王五",789,70);
	Student s4=new Student("张三",123,99);
	h.add(s1);
	h.add(s2);
	h.add(s3);
	h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值