如何保证添加自定义对象元素的唯一性
以圖書管理系統為例
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?? ?}
由此可知,此方法可行。
?
總結
以上是生活随笔為你收集整理的如何保证添加自定义对象元素的唯一性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并查集算法c语言版,并查集及其C程序实现
- 下一篇: java设计一个bank类实现银行_AO