以图书管理系统为例
1、首先自定义一个图书类Book,自定义变量id,name,auther,price并重写getset(),toString()方法,此处具体代码省略。
2、再自定义一个管理图书类Manage,在管理类中先定义一个ArrayList集合用来储存图书,再定义add()添加图书方法,具体如下:
private ArrayList<Book> books;public Manage(){books = new ArrayList<>();}//添加图书方法public void add(Book book){for(Book b:books)if(b.equals(book)){return;}books.add(book);}//输出方法public void showAll(){for (int i = 0; i <books.size() ; i++) {System.out.println(books.get(i));}
添加方法完成后,虽然使用了equals()方法,但并不能保证添加元素的唯一性,因为如果没有覆盖重写equals方法,那么Object类中默认进行==
运算符的对象地址比较,比较的是地址值,即只要不是同一个对象,结果必然为false。 所以,我们需要重写Book类中的equals()和hashcode()方法,用来比较对象中的内容,具体如下:
@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Book book = (Book) o;return id == book.id &&Double.compare(book.price, price) == 0 &&Objects.equals(name, book.name) &&Objects.equals(author, book.author);}@Overridepublic int hashCode() {return Objects.hash(id, price, name, author);}
重写完成后,即可保证添加自定义对象元素的唯一性,测试如下:
public class ManageTest {public static void main(String[] args) {Manage m = new Manage();m.add(new Book(1001,"红楼梦","张三",200));m.add(new Book(2002,"西游记","李四",140.50));m.add(new Book(3003,"三国演义","王五",130));m.add(new Book(4004,"水浒传","赵六",83));m.add(new Book(5005,"三个和尚","李四",50));m.add(new Book(5005,"三个和尚","李四",50));m.showAll();}
}
结果如下:
Book{id=1001 name=红楼梦 author=张三 price=200.0 }
Book{id=2002 name=西游记 author=李四 price=140.5 }
Book{id=3003 name=三国演义 author=王五 price=130.0 }
Book{id=4004 name=水浒传 author=赵六 price=83.0 }
Book{id=5005 name=三个和尚 author=李四 price=50.0 }
由此可知,此方法可行。