使用ArrayList存储变量

时间:2011-02-21 14:09:06

标签: java database arraylist

我正在编写一个项目来存储一个对象数组,可能是在一个arraylist中。

所以,我的对象有数据元素,getter和setter。我不知道如何访问对象的元素。

例如,我的对象是一本包含以下数据元素的书。

Book
->Author
->Price
->Date

如果某本书的价格发生变化,我该如何更新arrayList?我需要一个2d arrayList吗?我认为indexOf不起作用,因为它是一个对象?不太确定。

我只是编程的新手,所以我不确定arrayList是否是正确的数据结构。非常感谢您阅读本文,我们将非常感谢您的帮助。

4 个答案:

答案 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");