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