我正在编写一个项目来存储一个对象数组,可能是在一个arraylist中。
所以,我的对象有数据元素,getter和setter。我不知道如何访问对象的元素。
例如,我的对象是一本包含以下数据元素的书。
Book
->Author
->Price
->Date
如果某本书的价格发生变化,我该如何更新arrayList?我需要一个2d arrayList吗?我认为indexOf不起作用,因为它是一个对象?不太确定。
我只是编程的新手,所以我不确定arrayList是否是正确的数据结构。非常感谢您阅读本文,我们将非常感谢您的帮助。
答案 0 :(得分:2)
您可以通过索引访问ArrayList中的对象。说你想要第三本书:
List<Book> lisOfBooks = someFunctionWhichGetsListOfBooks();
Book book = listOfBooks.get(2);
(记住java中的索引从0开始)然后你可以这样做:
String Author = book.getAuthor();
或设定价格:
book.setPrice(newPrice);
如果您不知道列表中的哪个特定书籍,您有两个选择:1)遍历列表直到找到您想要的书或2)您可以使用HashMap。但是你需要决定把书放在哪里(每本书的独特之处是什么?)。假设您将按ID查找书籍。然后,您可以将所有书籍放在由整数ID键入的HashMap中:
HashMap<Integer, Book> bookHash = new HashMap<Integer, Book>();
for (Book book : listOfBooks) {
bookHash.put(book.getId(), book);
}
然后检索你可以做的任何书:
Book book = bookHash.get(bookId);
显然,这假设您的Book类具有适当的getter和setter方法。 E.g:
public class Book {
private int id;
private String author;
...
public String getAuthor() {
return author;
}
public void setPrice(price) {
this.price = price;
}
...
}
答案 1 :(得分:2)
如果您需要将对象存储在列表中,ArrayList
是一个很好的实现。书籍集合的一个很好的替代方案:Map
实现。如果每本书都可以通过唯一的密钥(名称,ISBN号等)识别,并且您使用该密钥从集合中“获取”一本书,这将非常有用。
书籍是其上的一个对象,应该使用Book
类建模。因此,如果您想将书籍存储在列表结构中,这样就可以了:
List<Book> books = new ArrayList<Book>();
books.add(new Book("Robert C. Martin","Clean Code"));
books.add(new Book("Joshua Bloch","Effective Java"));
对于地图,代码片段可能如下所示:
Map<String, Book> books = new HashMap<String, Book>();
books.put("978-0132350884", new Book("Robert C. Martin","Clean Code"));
books.put("978-0321356680", new Book("Joshua Bloch","Effective Java"));
编辑 - 查找图书并更新价格
使用列表,您必须遍历列表,直到您找到代表您正在寻找的图书的对象。如果你总是可以使用ISBN,那么使用上面显示的地图会更容易。列表如下:
List<Book> books = getBooks(); // get the books from somewhere
for (Book book:books) {
if (matchesSearchCriteria(book)) { // some method to identify a book, placeholder!
book.setPrice(newPrice); // modify the books price
break;
}
}
答案 2 :(得分:1)
您需要创建一个自定义的“数据类型”,基本上是一个POJO(普通的旧Java对象),它将包含您想要的所有参数的字段。我们称之为Book:
class Book {
public String author;
public double price;
public Date date;
}
当然最好有私有字段并使用getter和setter进行封装,为了简单起见,我写了这句话。
然后您可以创建一个Book对象列表。
List<Book> books = new ArrayList<Book>();
然后将书籍添加到其中,然后您可以像以下一样迭代:
for (Book book : books) {
System.out.println(book.getAuthor());
}
答案 3 :(得分:0)
我会看一些像hashmap这样的查找数据结构,例如
HashMap<String, Hashmap<String,String>> books = new Hashmap<String, HashMap<String, String>>();
HashMap<String, String> bookelements = new HashMap<String,String>();
bookelements.put("Author","J.K Rowling");
bookelements.put("Price","£5");
bookelements.put("Year","2000");
books.put("harry potter",bookelements);
//Get elements like so
String author = (String)books.get("harry potter").get("Author");