我已經看了很多地方,大多數數組列表示例使用「String」作爲它們的元素,但使用對象的地方很難找到。對象的Java Arraylist包含/等於
比方說,我在一本書收集工作,我有一個作家對象:
class Author {
String name;
<other data>;
int bookCount;
public Author(String n) {
name = n;
}
public boolean equals(Author other) {
if (other.name.equals(name)) { return true;}
return false;
}
}
所以我創建實例作爲ArrayList作者列表:
Arraylist<Author> writers;
所以我想找出作者是否存在,如果他們不存在或創建一個新條目,或者如果他們這樣做,則增加bookCount。我可以寫一個等於上作者姓名方法(如上圖所示),然後做一些事情,如:
bookAuthor = "James Gosling"; // normally an input
Author current = new Author(bookAuthor);
if (!writers.contains(current)) {
writers.add(current);
} else {
writers.get(writers.indexOf(current)).bookCount++;
}
我相信這會工作,我覺得很反感的是剛剛創造了大量的對象在比較之後將它們扔掉,但是我遇到的問題是Author的正常構造函數並不那麼簡單,並且涉及數據庫查找(如此昂貴)。
這意味着在這種情況下名稱唯一的構造函數仍然可以使用,但是然後我需要構造兩次作者。我能想到的唯一的另一種方式是創建一個從ArrayList繼承並重寫Contains和indexOf的新類。這似乎是一個很大的開銷,然後我是否需要重寫equals或hashCode或新類中的其他東西?
我是否錯過了一些東西,有沒有提供內聯函數或使某些東西容易使用對象容器的方法? 我希望,人們可以這樣做:
Arraylist<Author> {equals(String x) { if (x = this.name) { return true;} return false; } writers;
if (!writers.contains(bookAuthor)) {
writers.add(new Author(bookAuthor,dbconn);
} else {
writers.get(writers.indexOf(bookAuthor)).bookCount++;
}
當然包含和的indexOf沒有特徵碼,並把內聯是幾乎相同的工作量,創建新的類,但。
喜歡
Author
對象你是在暗示並行地圖存儲或更換名單?據我所知,如果後者我只能爲作者提取一個Collection對象。 – user1720253 2013-04-06 15:54:44