练习Java文档HashSet

import java.util.*;

public class HashSetTest
{
	public static void main(String[] args)
	{
		//书上例子1
		//p304,为了让我明白HashSet判断集合元素相同的标准,equals方法比较相等,并且hashCode()方法返回相等
		HashSet books = new HashSet();
		books.add(new A());
		books.add(new A());
		books.add(new B());
		books.add(new B());
		books.add(new C());
		books.add(new C());
		System.out.println(books);
		
		//例子2
		//向Set中添加可变对象,通过修改可变对象的实例变量,可能导致他与集合中的元素相同这种情况
		HashSet hs = new HashSet();
		hs.add(new R(5));
		hs.add(new R(-3));
		hs.add(new R(9));
		hs.add(new R(-2));
		//打印HashSet集合,集合元素没有重复
		System.out.println(hs);
		//取出第一个元素
		var it = hs.iterator();
		var first = (R) it.next();
		//为第一个元素的count实例变量赋值
		first.count = -3;
		//再次输出HashSet集合,集合元素有重复的元素
		System.out.println(hs);
		//删除count为-3的R对象
		hs.remove(new R(-3));
		//可以看到被删除了一个R元素
		System.out.println(hs);
		System.out.println("hs是否包含count为-3的R对象?"
			+hs.contains(new R(-3)));//输出false;
		System.out.println("hs是否包含count为-2的R对象?"
			+hs.contains(new R(-2)));//输出false

		//了解一下这种情况下,HashSet的异常,修改后,HashSet不认为被修改的元素是-3,也不认为他是-2,
		//因为他保存的地址是-2,但是count被修改为了-3

		System.out.println();
		System.out.println("java文档练习HashSet");
		//java文档练习
		//构造器练习
		HashSet hs1 = new HashSet();
		hs1 = new HashSet(100);
		hs1 = new HashSet(10,0.3F);
		ArrayList list = new ArrayList();
		list.add("a");
		list.add("b");
		hs1 = new HashSet(list);
		System.out.println(hs1);
		//方法练习
		hs1.add("牧神");
		//hs1.clear();
		//HashSet hs2 = (HashSet) hs1.clone();
		System.out.println(hs1.contains("啊啊"));
		System.out.println(hs1.contains("牧神"));
		System.out.println(hs1.isEmpty());
		//hs1.clear();
		//System.out.println(hs1.isEmpty());
		System.out.println("使用Iterator遍历集合");
		it = hs1.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		HashSet hs2 = (HashSet)hs1.clone();
		hs1.remove("牧神");
		hs1.remove("a");
		System.out.println(hs1);
		System.out.println(hs2);

		
		System.out.println(hs1.size());
		
		Spliterator<String> spli = hs1.spliterator();
		System.out.println(spli.characteristics());
		
		System.out.println(hs1.toArray());
		System.out.println(Arrays.toString(hs1.toArray()));
		System.out.println(Arrays.toString(hs1.toArray(new String[5] )));
	}



}
//类A的equals()方法总是返回true,但没有重写其HashCode()方法
class A
{
	@Override
	public boolean equals(Object obj)
	{
		/*
			正常重写是这样
		if(this == obj)
			return true;
		if(obj != null && obj.getClass() == R.class)
		{
			var r = (R) obj;
				return this.count == r.count;
		}
		return false;
		*/
				

		return true;
	}
}
//类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B
{
	@Override
	public int hashCode()
	{
		return 1;
	}
}
//类C的hashCode()方法总是返回2,且重写其equals()方法总是返回true
class C
{
	@Override
	public int hashCode()
	{
		return 2;
	}
	public boolean equals(Object obj)
	{
		return true;
	}
}

//例子2
class R
{
	int count;
	public R(int count)
	{
		this.count = count;
	}
	public String toString()
	{
		return "R[count="+count +"]";
	}
	public boolean equals(Object obj)
	{
		if(this == obj)
			return true;
		if(obj != null && obj.getClass() == R.class)
		{
			var r = (R) obj;
			return r.count == this.count;
		}
		return false;
	}
	public int hashCode()
	{
		return this.count;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值