TreeSet:有序,无重复元素
注意:
有序:要实现Comparable接口, 重复:根据Comparable的返回值为0来判断两个元素是否相同
public class test {
public static void main(String args[]) throws Exception {
Set<Book> all = new TreeSet<>();
all.add(new Book("Java开发",45.6));
all.add(new Book("Java开发",45.6));
all.add(new Book("JSP开发",45.6));
all.add(new Book("Android开发",89.56));
System.out.println(all);
}
}
class Book implements Comparable<Book>{
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public int compareTo(Book o) {
if(this.price > o.price){
return 1;
}else if(this.price < o.price) {
return -1;
}else{
return this.title.compareTo(o.title);
}
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", price=" + price +
'}';
}
}
HashSet:无序,不重复
注意:判断不重复的两个步骤
1)取得哈希码:public int hashCode()
先判断对象的哈希码是否相同,依靠哈希码取得一个对象的内容
2)对象比较:public boolean equals(Object obj)
再将对象的属性进行一次的比较
public class test {
public static void main(String args[]) throws Exception {
Set<Book> all = new HashSet<>();
all.add(new Book("Java开发",45.6));
all.add(new Book("Java开发",45.6));
all.add(new Book("JSP开发",45.6));
all.add(new Book("Android开发",89.56));
System.out.println(all);
}
}
class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
if (Double.compare(book.price, price) != 0) return false;
return title != null ? title.equals(book.title) : book.title == null;
}
@Override
public int hashCode() {
long temp = Double.doubleToLongBits(price);
return (int) (temp ^ (temp >>> 32));
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", price=" + price +
'}';
}
}