JavaでのHashSetの基本的な使用

2485 ワード

文章は自分でHash Setを勉強する過程を記録しています.いくつかの方法については少し雑かもしれませんが、カバーは少し大きいかもしれませんが、いいですね.
HashSetには重複できないオブジェクトしか格納できず、プログラムを繰り返してもエラーは発生しませんが、後の内容は前のものを上書きします(実際には誰が誰を上書きしているのかはわかりませんが、mapでは明らかにわかります)
まずHashSetを定義します     HashSet set = new HashSet();説明すると、私のところのAnimalSetは定義されたペットのクラスです(HashSetの基本的な使い方をよりよく示すためです).ここで導入する必要があるパッケージはimport java.util.HashSetです.
私のAnimalSetはクラスなので、まずオブジェクトAnimalSet one=new AnimalSet(「AA」,12,「AAA」)をインスタンス化しなければなりません.
  • set.add(one);set.add(two);2つのオブジェクトを追加します.それぞれoneです.   two
    オブジェクトAnimalSet three=new AnimalSet(「AA」,12,「AAA」)を作成している場合.私set.add(three);前に述べたように重複してカバーされていないことに気づいたのは、私がnewの新しいオブジェクトを作ったときに、新しい空間を開いたからです.私がaddをしたとき、前のoneとは2つの異なる空間だったので、直接addが入ってしまいました.内容のようにaddのオブジェクトをカバーさせるには、equalsとhashCodeを書き換える必要があります.私が伝えた内容が同じかどうかを一つ一つ判断します.
    私のクラスによると、書き換えはコードを貼って、具体的な書き換えは自分のプログラムによって見ます(eclipseの中のsourceの中のショートカットキーで急速に生成して、主にequalsの中の部分のコードで、hashCodeは変える必要はありません)
    @Override
    public int hashCode() {
    	final int prime = 31;
    	int result = 1;
    	result = prime * result + age;
    	result = prime * result + ((name == null) ? 0 : name.hashCode());
    	result = prime * result + ((species == null) ? 0 : species.hashCode());
    		return result;
    }
    @Override
    public boolean equals(Object obj) {
    //	        ,        true
    	if (this == obj)
    		return true;
    //	  obj   AnimalSet  ,        ,            
    	if(obj.getClass() == AnimalSet.class) {
    		AnimalSet cat = (AnimalSet)obj;
    		return cat.getName().equals(name)&&(cat.getAge() == age)&&cat.getSpecies().equals(species);
    	}
    	return false;
    }
  • 削除
  • 要素を削除するにはset.remove(one)が使用されます.
    複数の要素を削除するにはset.removeAll(set)が使用されます.(サブセットを削除するためにも使用できます)またはclear()です.両者が異なる場合、前者はboolean値を返します.これは、クリアに成功したかどうか、後者は戻り値がありません.
    しかし、1つの要素を削除する際に問題がある場合があります(長さが動的に変化するため、いくつかの要素を削除した後に反復器が変化を指す可能性があります.HashSetの遍歴はiteratorしか使用できないためです).解決方法も状況別に議論する必要があります.もし1つの要素を削除するだけであれば、削除した後に直接breakします.すなわち、複数の要素を削除する必要がある場合は、まず要求に合致する要素を別のtmpセットに入れ、削除したAPI(set.removeAll(tmp))を利用してすべて削除すればよい
  • 調べ
  • クラスを検索すると、通常は伴随者遍歴、setの遍歴方法が必要です    Iterator it = set.iterator();次にit.hasNext()を使用して、次の要素があるかどうかを判断します.it.next()次の要素を表して、操作すればいいです.PS:直接印刷すると、オブジェクトはデフォルトでtoString()メソッドを呼び出し、自分でそのメソッドを書き換えることができます.
    要素があるかどうかを判断する場合はset.contains()をそのまま使用し、boolean値を返します.
  • 改    私にできることを见て、修正することができません~を见て、相応のAPIを提供していませんが、私达はAnimalSetの中のオブジェクトを修正することでデータと新しいことができます~例えば:one.setAge(5);その後、再印刷すると、
  • のデータが変更されたことがわかります.
    より多くのAPI学習を表示https://docs.oracle.com/javase/8/docs/api/