Java_まとめ15(集合-Setインタフェース-Setでよく使われる2つの実装クラスHashSet,TreeSet)
18412 ワード
一、Setインタフェース
SetインタフェースはCollectionインタフェースの追加の方法を提供していないが、Setインタフェースを実装する集合クラスの要素は重複しない.
二、HashSet集合クラス
--HashSetは要素の追加順序を保存しません.
--HashSetは要素のハッシュコードに基づいて格納され、取り出す際にもハッシュコードに基づいて素早く見つけることができる.
--HashSetに要素を追加する場合、システムは重複しないことを保証するためにhashCode()を比較し、同じ場合equals()を比較し、同じ場合は同じオブジェクトとみなし、追加しない、add(...)falseを返します.
--[Demo]HashSetセットに格納するカスタムタイプのオブジェクトは、通常hashCode()メソッドとequals()メソッドを書き換える必要があります.
--同じオブジェクトのhash値は必ず同じであり、同じhash値は必ずしも同じオブジェクトではなく、さらには異なるオブジェクトである可能性があります.
HashSetオブジェクトの格納、hashCode()とequals()の書き換え方法の例
実行結果:
三、TreeSet集合クラス
--TreeSetは、赤と黒のツリー構造を使用して、追加された要素を並べ替えて保存します.出力は、並べ替え後の順序になりますので、TreeSetに入れる要素は「並べ替え可能」でなければなりません.
--TreeSetコレクションのjavabeanクラス自体に参加するには、Comparable['k]を実装します.ɑmpərəbl]インタフェース
--インプリメンテーションをカスタマイズします.ɑmpə,retɚ]インタフェースのコンパレータ実装クラスは、TreeSetオブジェクトを作成するときにカスタムコンパレータを構築方法に入力します.
--追加されたクラス「比較不可」の場合、add()メソッドは実行時にエラーを報告します.
すべてのソート可能なクラスはjavaを実装する必要があります.lang.Comparableインタフェース
このインタフェースを実装する唯一の方法:public int compareTo(Object obj);この方法は
(this:新規オブジェクト;obj:コレクションに既に存在するオブジェクト)
--は0を返し、this==objを表し、集合に参加しない
--正の数を返します.this>objを表します.thisは大きく後ろに置きます.
--負の数を返します.this
Comparableインタフェースの実装例
実行結果:
Comparatorインタフェースを実装するコンパレータ実装クラスをカスタマイズ
実行結果:
転載先:https://www.cnblogs.com/liujianliang/articles/6858234.html
SetインタフェースはCollectionインタフェースの追加の方法を提供していないが、Setインタフェースを実装する集合クラスの要素は重複しない.
二、HashSet集合クラス
--HashSetは要素の追加順序を保存しません.
--HashSetは要素のハッシュコードに基づいて格納され、取り出す際にもハッシュコードに基づいて素早く見つけることができる.
--HashSetに要素を追加する場合、システムは重複しないことを保証するためにhashCode()を比較し、同じ場合equals()を比較し、同じ場合は同じオブジェクトとみなし、追加しない、add(...)falseを返します.
--[Demo]HashSetセットに格納するカスタムタイプのオブジェクトは、通常hashCode()メソッドとequals()メソッドを書き換える必要があります.
--同じオブジェクトのhash値は必ず同じであり、同じhash値は必ずしも同じオブジェクトではなく、さらには異なるオブジェクトである可能性があります.
HashSetオブジェクトの格納、hashCode()とequals()の書き換え方法の例
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
// hashCode()
@Override
public int hashCode() {
return this.name.hashCode() + this.age;// age hashCode,
}
// equals()
@Override
public boolean equals(Object obj) { //= p
// this.name .name
// this.age .age
// obj null false
if(obj == null){
return false;
}
// true
if(obj == this){
return true;
}
if(obj instanceof Person){
Person paramter = (Person)obj;
if(this.name.equals(paramter.name) && this.age == paramter.age){
return true;
}
}
return false;
}
}
import java.util.HashSet;
public class Test11 {
public static void main(String[] args) {
HashSet hashSet = new HashSet<>();
hashSet.add(new Person(" ", 12));
hashSet.add(new Person(" ", 12));
hashSet.add(new Person(" ", 14));
hashSet.add(new Person(" ", 12));
System.out.println(hashSet);
}
}
実行結果:
[Person [name= , age=12], Person [name= , age=14], Person [name= , age=12]]
三、TreeSet集合クラス
--TreeSetは、赤と黒のツリー構造を使用して、追加された要素を並べ替えて保存します.出力は、並べ替え後の順序になりますので、TreeSetに入れる要素は「並べ替え可能」でなければなりません.
--TreeSetコレクションのjavabeanクラス自体に参加するには、Comparable['k]を実装します.ɑmpərəbl]インタフェース
--インプリメンテーションをカスタマイズします.ɑmpə,retɚ]インタフェースのコンパレータ実装クラスは、TreeSetオブジェクトを作成するときにカスタムコンパレータを構築方法に入力します.
--追加されたクラス「比較不可」の場合、add()メソッドは実行時にエラーを報告します.
すべてのソート可能なクラスはjavaを実装する必要があります.lang.Comparableインタフェース
このインタフェースを実装する唯一の方法:public int compareTo(Object obj);この方法は
(this:新規オブジェクト;obj:コレクションに既に存在するオブジェクト)
--は0を返し、this==objを表し、集合に参加しない
--正の数を返します.this>objを表します.thisは大きく後ろに置きます.
--負の数を返します.this
Comparableインタフェースの実装例
package chapter.three;
import java.text.CollationKey;
import java.text.Collator;
public class Person implements Comparable{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person o) {
// ,
if (this.age > o.age) {
return 1;
}else if (this.age < o.age) {
return -1;
}else {
// , ,
CollationKey key1 = Collator.getInstance().getCollationKey(this.name);
CollationKey key2 = Collator.getInstance().getCollationKey(o.name);
int num = key1.compareTo(key2);
if (num > 0) {
return 1;
}else if (num < 0) {
return -1;
}else {
return 0;// 0
}
// , return o1.getName().compareTo(o2.getName());
}
}
}
import java.util.HashSet;
import java.util.TreeSet;
public class Test11 {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet<>();
treeSet.add(new Person(" ", 14));
treeSet.add(new Person(" ", 12));
treeSet.add(new Person(" ", 12));
treeSet.add(new Person(" ", 19));
for (Person person : treeSet) {
System.out.println(person);
}
}
}
実行結果:
Person [name= , age=12]
Person [name= , age=12]
Person [name= , age=14]
Person [name= , age=19]
Comparatorインタフェースを実装するコンパレータ実装クラスをカスタマイズ
import java.text.CollationKey;
import java.text.Collator;
public class Person/* implements Comparable */{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
public class MyComparator implements Comparator{
@Override
public int compare(Person o1, Person o2) {
// ,
if (o1.getAge() > o2.getAge()) {
return 1;
}else if (o1.getAge() < o2.getAge()) {
return -1;
}else {
// , ,
CollationKey key1 = Collator.getInstance().getCollationKey(o1.getName());
CollationKey key2 = Collator.getInstance().getCollationKey(o2.getName());
int num = key1.compareTo(key2);
if (num > 0) {
return 1;
}else if (num < 0) {
return -1;
}else {
return 0;// 0
}
}
}
}
import java.util.TreeSet;
public class Test11 {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet<>(new MyComparator());
treeSet.add(new Person(" ", 14));
treeSet.add(new Person(" ", 12));
treeSet.add(new Person(" ", 12));
treeSet.add(new Person(" ", 19));
for (Person person : treeSet) {
System.out.println(person);
}
}
}
実行結果:
Person [name= , age=12]
Person [name= , age=12]
Person [name= , age=14]
Person [name= , age=19]
転載先:https://www.cnblogs.com/liujianliang/articles/6858234.html