HashSet的使用

Collection下的子类:
List
  有序(存储顺序和取出顺序一致),可重复
Set
  无序(存储顺序和取出顺序不一致),唯一

  HashSet:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。
  注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,
  而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,就能看到效果。
eg:

public class SetDemo {
	public static void main(String[] args) {
		// 创建集合对象
		Set<String> set = new HashSet<String>();

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

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

eg 2 : HashSet:存储字符串并遍历

 问题:为什么存储字符串的时候,字符串内容相同的只存储了一个呢?
 通过查看add方法的源码,我们知道这个方法底层依赖 两个方法:hashCode()和equals()。
 步骤:
  1.首先比较哈希值
  2.如果相同,继续走,比较地址值或者走equals()
  3.如果不同,就直接添加到集合中
  4.按照方法的步骤来说:
  5.先看hashCode()值是否相同
   5.1.相同:继续走equals()方法
    5.1.1.返回true: 说明元素重复,就不添加
    5.1.2.返回false:说明元素不重复,就添加到集合
  5.2.不同:就直接把元素添加到集合
  6.如果类没有重写这两个方法,默认使用的Object()。一般来说不同相同。
  7.而String类重写了hashCode()和equals()方法,所以,它就可以把内容相同的字符串去掉。只留下一个。

public class HashSetDemo {
	public static void main(String[] args) {
		// 创建集合对象
		HashSet<String> hs = new HashSet<String>();

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

		// 遍历集合
		for (String s : hs) {
			System.out.println(s);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值