JAva集合フレームワーク-HashSet

1707 ワード

/*
  HashSet        

HashSet            :
       ,hashCode equals   。
     HashCode   ,    equals   true。
     HashCode   ,    equals。

       HashSet   ,       。

  :          ,       ,         hashcode equals  。
*/

import java.util.*;

class Person
{
	private String name;
	private int age;

	Person(String name,int age)
	{
		this.name=name;
		this.age=age;
	}

	public String getName()
	{
		return name;
	}

	public int getAge()
	{
		return age;
	}

	public int hashCode()
	{
		return name.hashCode()+age*37;
	}

	public boolean equals(Object obj)
	{
		if(!(obj instanceof Person))
			return false;
		Person p=(Person)obj;
		return this.name.equals(p.name)&&this.age==p.age;
	}

}

class HashSetDemo1 
{
	public static void main(String[] args) 
	{

		HashSet hs=new HashSet();
		hs.add(new Person("Lily_1",30));
		hs.add(new Person("Lily_2",30));
		hs.add(new Person("Lily_3",30));
		hs.add(new Person("Lily_3",30));
		hs.add(new Person("Lily_4",30));
		hs.add(new Person("Lily_4",30));
		hs.add(new Person("Lily_5",30));


		hs.remove(new Person("Lily_5",30));
		Iterator it=hs.iterator();

		while(it.hasNext())
		{
			Person p=(Person)it.next();
			sop(p.getName()+"..."+p.getAge());
		}
		System.out.println("Hello World!");
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

}

Set:要素は無秩序(格納と取り出しの順序が必ずしも一致しない)であり、要素は繰り返してはならない.HashSetはハッシュ表に基づいている.ハッシュテーブルの特徴:ハッシュテーブルに格納されているのはオブジェクトのハッシュアドレス値であり、新しいオブジェクトアドレスを追加すると、まずハッシュテーブルにそのアドレス値があるかどうかを判断し、ある場合は同じオブジェクトであるかどうかを判断し、そうでなければ格納し、そうであれば格納しない.ない場合は、保存します.この特徴はHashSet集合が無秩序で反復不可能であることを決定した.