Javaのセットは簡単にまとめて解析します。
Setインターフェースの概要
Setインターフェースは、Listインターフェースと同様に、Collectionインターフェースから継承されており、Collectionインターフェースにおける方法とほぼ一致しており、Collectionインターフェースを機能的に拡張することはなく、Collectionインターフェースよりも厳格である。Listインターフェースとは違って、Setインターフェース要素は無秩序であり、何らかの規則で預け入れ要素が重複しないように保証されます。
Setインターフェースは主に2つの実装クラスがあります。それぞれHashSetとTreeSetです。ここで、HashSetは、オブジェクトのハッシュ値に基づいて、セット内の要素の格納位置を決定し、したがって、良好なアクセスおよび検索性能を有する。TreeSetは、二叉の木のように要素を記憶し、集合中の要素を並べ替えることができます。
ハーシーセット
HashSetはSetインターフェースの実装クラスであり、記憶されている要素は重複不可能であり、要素は無秩序である。HashSetのセットにオブジェクトを追加すると、まず、オブジェクトのハッシュ値を計算するために、オブジェクトのhashCode()方法を呼び出して、要素の格納位置を決定する。このハッシュ値が同じであれば、オブジェクトのequals()方法を再起動して、位置に重複要素がないことを確認する。SetセットとListセットのアクセス要素は同じです。
HashSet集合の使用法を例によって実証した。
集合に要素を預ける時、HashSetが正常に動作するように、オブジェクトを預け入れる時、Object類のhashCodeとequalsを書き換えることが要求されます。
上記のケースでは、HashSetに文字列を格納した場合、SteringクラスはhashCode()とequals()を書き換えました。しかし、もしStudentの対象をHashSetに預けたら、どうなりますか?
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Setインターフェースは、Listインターフェースと同様に、Collectionインターフェースから継承されており、Collectionインターフェースにおける方法とほぼ一致しており、Collectionインターフェースを機能的に拡張することはなく、Collectionインターフェースよりも厳格である。Listインターフェースとは違って、Setインターフェース要素は無秩序であり、何らかの規則で預け入れ要素が重複しないように保証されます。
Setインターフェースは主に2つの実装クラスがあります。それぞれHashSetとTreeSetです。ここで、HashSetは、オブジェクトのハッシュ値に基づいて、セット内の要素の格納位置を決定し、したがって、良好なアクセスおよび検索性能を有する。TreeSetは、二叉の木のように要素を記憶し、集合中の要素を並べ替えることができます。
ハーシーセット
HashSetはSetインターフェースの実装クラスであり、記憶されている要素は重複不可能であり、要素は無秩序である。HashSetのセットにオブジェクトを追加すると、まず、オブジェクトのハッシュ値を計算するために、オブジェクトのhashCode()方法を呼び出して、要素の格納位置を決定する。このハッシュ値が同じであれば、オブジェクトのequals()方法を再起動して、位置に重複要素がないことを確認する。SetセットとListセットのアクセス要素は同じです。
HashSet集合の使用法を例によって実証した。
public class Example01 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add(" ");
set.add(" ");
set.add(" ");
set.add(" ");
Iterator it = set.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
}
}
結論:集合に要素を預ける時、HashSetが正常に動作するように、オブジェクトを預け入れる時、Object類のhashCodeとequalsを書き換えることが要求されます。
上記のケースでは、HashSetに文字列を格納した場合、SteringクラスはhashCode()とequals()を書き換えました。しかし、もしStudentの対象をHashSetに預けたら、どうなりますか?
class Student{
String id;
String name;
public Student(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return id+":"+name;
}
@Override
public int hashCode() {
return id.hashCode(); // id
}
@Override
public boolean equals(Object obj) {
if(this == obj) { //
return true; // , true
}
if(!(obj instanceof Student)) { // Student
return false; // Student false
}
Student stu = (Student) obj; // Student
boolean b = this.id.equals(stu.id); // id
return b; //
}
}
public class Example02 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add(new Student("1", " "));
set.add(new Student("2", " "));
set.add(new Student("2", " "));
System.out.println(set);
}
}
Student類はObject類のhashCode()とequals()方法を書き換えました。hashCoded()方法では、id属性のハッシュ値を返し、equals()方法では、オブジェクトのid属性が等しいかどうかを比較し、結果を返す。HashSetのセットのadd()方法を呼び出してstu 3オブジェクトを追加すると、そのハッシュ値はstu 2オブジェクトと同じであり、stu 2.equalsはtrueに戻る。HashSetセットは、2つのオブジェクトが同じと考えられているため、重複したStudentオブジェクトペアは削除されました。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。