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;
}
}
练习Java文档HashSet
最新推荐文章于 2022-07-23 18:59:07 发布