1、实体类实现equals()和hashCode()方法
package com.zch.book.entity;
import java.sql.Date;
public class Book {
private int bookNo;//图书编号
private String bookName;//图书名字
private String bookAuthor;//图书作者
private Date bookDate;//出版日期
private String bookDescription;//图书描述
public int getBookNo() {
return bookNo;
}
public void setBookNo(int bookNo) {
this.bookNo = bookNo;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
public Date getBookDate() {
return bookDate;
}
public void setBookDate(Date bookDate) {
this.bookDate = bookDate;
}
public String getBookDescription() {
return bookDescription;
}
public void setBookDescription(String bookDescription) {
this.bookDescription = bookDescription;
}
public Book(int bookNo, String bookName, String bookAuthor, Date bookDate, String bookDescription) {
super();
this.bookNo = bookNo;
this.bookName = bookName;
this.bookAuthor = bookAuthor;
this.bookDate = bookDate;
this.bookDescription = bookDescription;
}
public Book() {
super();
}
@Override
public String toString() {
return "Book [bookNo=" + bookNo + ", bookName=" + bookName + ", bookAuthor=" + bookAuthor + ", bookDate="
+ bookDate + ", bookDescription=" + bookDescription + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((bookAuthor == null) ? 0 : bookAuthor.hashCode());
result = prime * result + ((bookDate == null) ? 0 : bookDate.hashCode());
result = prime * result + ((bookDescription == null) ? 0 : bookDescription.hashCode());
result = prime * result + ((bookName == null) ? 0 : bookName.hashCode());
result = prime * result + bookNo;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Book other = (Book) obj;
if (bookAuthor == null) {
if (other.bookAuthor != null)
return false;
} else if (!bookAuthor.equals(other.bookAuthor))
return false;
if (bookDate == null) {
if (other.bookDate != null)
return false;
} else if (!bookDate.equals(other.bookDate))
return false;
if (bookDescription == null) {
if (other.bookDescription != null)
return false;
} else if (!bookDescription.equals(other.bookDescription))
return false;
if (bookName == null) {
if (other.bookName != null)
return false;
} else if (!bookName.equals(other.bookName))
return false;
if (bookNo != other.bookNo)
return false;
return true;
}
}
2、测试方法
//利用list和set集合实现去重
@Test
public void test() {
//模拟从数据库中取出来的数据并存入list集合
Book book = new Book(1869,"aaa", "张灵", DateFormat.to_Date2("2018-9-6"), "王者峡谷一游");
ArrayList<Book> list = new ArrayList<Book>();
list.add(book);
//创建一个set集合来存放从数据库中取出来的数据
HashSet<Book> orgSet = new HashSet<Book>();
orgSet.addAll(list);
//模拟从前台传入的两条数据,并将这两条数据也加入同一个list集合中
Book book3 = new Book(1869,"aaa", "张灵", DateFormat.to_Date2("2018-9-6"), "王者峡谷一游");
Book book2 = new Book(1869,"bbb", "张三", DateFormat.to_Date2("2018-9-6"), "");
list.add(book2);
list.add(book3);
//创建另一个set集合来存放前台传入的数据和数据库中取出来的数据
HashSet<Book> set = new HashSet<Book>();;
set.addAll(list);
/**
* 分析:利用set集合的去重特性,对于相同内容的对象,在set集合中只存储其中一个,
* 因此,前一个set集合是后一个set集合的子集,
* 这时候,我们需要对这两个集合做差集操作,取出不同的数据即可。
*/
//新创建一个set集合,用于存放用存放并集、交集和差集
HashSet<Book> resultSet = new HashSet<Book>();
//1、并集操作
resultSet.addAll(orgSet);
resultSet.addAll(set);
System.err.println("并集操作:"+resultSet);
//2、交集操作
resultSet.clear();//清空集合
resultSet.addAll(orgSet);
resultSet.retainAll(set);
System.err.println("交集操作:"+resultSet);
//3、差集操作,与顺序有关
resultSet.clear();
resultSet.addAll(set);
resultSet.removeAll(orgSet);
System.err.println("差集操作:"+resultSet);
}
3、测试结果: