Set集合(集合补充)

在这里插入图片描述
Set集合特点
无序(存储顺序和取出顺序不一致),唯一

Set set = new HashSet();

	// 创建并添加元素
	set.add("hello");
	set.add("java");
	set.add("world");
	set.add("java");
	set.add("world");

	// 增强for
	for (String s : set) {
		System.out.println(s);
	}

HashSet类
概述:
1、不保证set的迭代顺序
2、特别是它不保证该顺序恒久不变

HashSet如何保证元素的唯一性:
1、底层数据结构是哈希表(元素是链表的数组)
2、哈希表依赖于哈希值存储
3、添加功能底层依赖两个方法:
int hashCode()和boolean equals(Object obj)
判断步骤:
先看hashCode()值是否相同
相同:继续走equals()方法
返回true: 说明元素重复,就不添加
返回false:说明元素不重复,就添加到集合
不同:就直接把元素添加到集合

注意:如果类没有重写这两个方法,默认使用的Object()。
而String类重写了hashCode()和equals()方法,所以,它就可以把内容相同的字符串去掉。只留下一个。

HashSet集合存储自定义对象时保证元素的唯一性必须重写hashCode()和boolean equals(Object obj)
LinkedHashset类
概述:
1、元素有序唯一
2、由链表保证元素有序(存储和取出是一致)
3、由哈希表保证元素唯一
底层数据结构由哈希表和链表组成。
Treeset类
概述:
1、使用元素的自然顺序对元素进行排序
2、或者根据创建set是提供的Comparable进行排序
3、具体取决于使用的构造方法

Treeset如何保证元素的排序和唯一性:
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
原理:
1、第一个元素存储的时候,直接作为根节点存储
2、从第二个元素开始,每个元素从根节点开始比较
大:放右边
小:放左边
相等:不管
3、读取:从根节点开始,按照左中右的原则依次取出元素
在这里插入图片描述

自然排序:无参构造是自然排序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值