判定两个元素的hashCode返回值是否相同,若不同,返回false。
若两者hashCode相同,判定equals方法,若不同,返回false;否则返回truc。
注:hashCode和equals方法是所有类都有的,因为Object类有
import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.TreeSet; public class ObjectHashSetTest { public static void main(String[] args) { System.out.println("==========Cat HashSet =============="); HashSet<Cat> hs = new HashSet<Cat>(); hs.add(new Cat(2)); hs.add(new Cat(1)); hs.add(new Cat(3)); hs.add(new Cat(5)); hs.add(new Cat(4)); hs.add(new Cat(4)); System.out.println(hs.size()); //6 System.out.println("========================"); LinkedHashSet<Cat> lhs = new LinkedHashSet<Cat>(); lhs.add(new Cat(2)); lhs.add(new Cat(1)); lhs.add(new Cat(3)); lhs.add(new Cat(5)); lhs.add(new Cat(4)); lhs.add(new Cat(4)); System.out.println(lhs.size()); //6 System.out.println("==========Dog HashSet =============="); HashSet<Dog> hs2 = new HashSet<Dog>(); hs2.add(new Dog(2)); hs2.add(new Dog(1)); hs2.add(new Dog(3)); hs2.add(new Dog(5)); hs2.add(new Dog(4)); hs2.add(new Dog(4)); System.out.println(hs2.size()); //5 System.out.println("========================"); LinkedHashSet<Dog> lhs2 = new LinkedHashSet<Dog>(); lhs2.add(new Dog(2)); lhs2.add(new Dog(1)); lhs2.add(new Dog(3)); lhs2.add(new Dog(5)); lhs2.add(new Dog(4)); lhs2.add(new Dog(4)); System.out.println(lhs2.size()); //5 System.out.println("==========Tiger HashSet =============="); HashSet<Tiger> hs3 = new HashSet<Tiger>(); hs3.add(new Tiger(2)); hs3.add(new Tiger(1)); hs3.add(new Tiger(3)); hs3.add(new Tiger(5)); hs3.add(new Tiger(4)); hs3.add(new Tiger(4)); System.out.println(hs3.size()); //6 System.out.println("========================"); LinkedHashSet<Tiger> lhs3 = new LinkedHashSet<Tiger>(); lhs3.add(new Tiger(2)); lhs3.add(new Tiger(1)); lhs3.add(new Tiger(3)); lhs3.add(new Tiger(5)); lhs3.add(new Tiger(4)); lhs3.add(new Tiger(4)); System.out.println(lhs3.size()); //6 } }
class Cat { private int size; public Cat(int size) { this.size = size; } }
public class Tiger implements Comparable { private int size; public Tiger(int s) { size = s; } public int getSize() { return size; } @Override public int compareTo(Object o) { System.out.println("Tiger compareTo()~~~~~~~~~~~"); return size - ((Tiger) o).getSize(); } //HashSet的元素判定规则只和hashCode、 equals这2个方法有关,和compareTo方法无关。 }
class Dog { private int size; public Dog(int s) { size = s; } public int getSize() { return size; } @Override public boolean equals(Object obj2) { System.out.println("Dog equals()~~~~~~~~~~~"); if (0 == size - ((Dog) obj2).getSize()) { return true; } else { return false; } } @Override public int hashCode() { System.out.println("Dog hashCode()~~~~~~~~~~~"); return size; } @Override public String toString() { System.out.print("Dog toString()~~~~~~~~~~~"); return size + ""; } //注:这个三个方法是三位一体,equals()是相同的,hashCode()是相同的,则toString()也应该是相同的 }
需要元素继承自Comparable接口
比较两个元素的compareTo方法是否相同,若相同返回true,否则返回false。
import java.util.TreeSet; public class ObjectTreeSetTest { public static void main(String[] args) { /* System.out.println("==========Cat TreeSet =============="); TreeSet<Cat> ts = new TreeSet<Cat>(); ts.add(new Cat(2)); ts.add(new Cat(1)); ts.add(new Cat(3)); ts.add(new Cat(5)); ts.add(new Cat(4)); ts.add(new Cat(4)); System.out.println(ts.size()); //5 System.out.println("==========Dog TreeSet =============="); TreeSet<Dog> ts2 = new TreeSet<Dog>(); ts2.add(new Dog(2)); ts2.add(new Dog(1)); ts2.add(new Dog(3)); ts2.add(new Dog(5)); ts2.add(new Dog(4)); ts2.add(new Dog(4)); System.out.println(ts2.size()); //5 */ //添加到TreeSet的,需要实现Comparable接口,即实现compareTo方法 //HashSet的元素判定规则只和hashCode、 equals这2个方法有关,和compareTo方法无关。 System.out.println("==========Tiger TreeSet =============="); TreeSet<Tiger> ts3 = new TreeSet<Tiger>(); ts3.add(new Tiger(2)); ts3.add(new Tiger(1)); ts3.add(new Tiger(3)); ts3.add(new Tiger(5)); ts3.add(new Tiger(4)); ts3.add(new Tiger(4)); System.out.println(ts3.size()); //5 } }
public class Tiger implements Comparable { private int size; public Tiger(int s) { size = s; } public int getSize() { return size; } @Override public int compareTo(Object o) { System.out.println("Tiger compareTo()~~~~~~~~~~~"); return size - ((Tiger) o).getSize(); } //HashSet的元素判定规则只和hashCode、 equals这2个方法有关,和compareTo方法无关。 }