Использование ArrayList для хранения переменных - PullRequest
1 голос
/ 21 февраля 2011

Я кодирую проект для хранения массива объектов, возможно, в массиве.

Итак, у моего объекта есть элементы данных, геттеры и сеттеры.У меня нет идеи, как получить доступ к элементам объекта.

Например, мой объект - книга, в которой есть следующие элементы данных.

Book
->Author
->Price
->Date

Если цена определенногоизменения книги, как мне обновить arrayList?Нужен ли мне 2d arrayList?Я думаю, что indexOf не будет работать, потому что это объект?Не совсем уверен.

Я просто новичок в программировании, поэтому я не уверен, является ли arrayList правильной структурой данных для использования.Большое спасибо за чтение, ваша помощь будет оценена.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2011

Вы можете получить доступ к объекту в ArrayList по его индексу.Скажем, вы хотите третью книгу:

List<Book> lisOfBooks = someFunctionWhichGetsListOfBooks();

Book book = listOfBooks.get(2);

(помните, что индексы начинаются с 0 в java). Затем вы можете сделать:*

Если вы не знаете, где в списке находится конкретная книга, у вас есть 2 варианта: 1) перебирать список, пока не найдете нужную книгу, или 2) вы можете использовать HashMap.Но вам нужно решить, на чем будет основываться книга (что делает каждую книгу уникальной?).Допустим, вы будете искать книги по идентификатору.Затем вы можете поместить все свои книги в HashMap с ключом Integer id:

HashMap<Integer, Book> bookHash = new HashMap<Integer, Book>();

for (Book book : listOfBooks) {
    bookHash.put(book.getId(), book);
}

Затем, чтобы получить любую книгу, которую вы можете сделать:

Book book = bookHash.get(bookId);

Очевидно, это предполагает, что ваш класс Bookсоответствующие методы получения и установки.Например:

public class Book {

   private int id;
   private String author;
   ...

   public String getAuthor() {
      return author;
   }

   public void setPrice(price) {
     this.price = price;
   }

   ...

} 
2 голосов
/ 21 февраля 2011

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;
   }
}
1 голос
/ 21 февраля 2011

Вам необходимо создать пользовательский «тип данных», в основном POJO (простой старый Java-объект), в котором будут поля для всех необходимых параметров.Давайте назовем это Book:

class Book {
  public String author;
  public double price;
  public Date date;
}

Конечно, лучше иметь закрытые поля и инкапсулировать их с помощью методов получения и установки, я просто написал это для простоты.

Затем вы можете создать список книгобъекты.

List<Book> books = new ArrayList<Book>();

И добавьте в него Книги, которые потом можно будет повторить следующим образом:

for (Book book : books) {
  System.out.println(book.getAuthor());
}
0 голосов
/ 21 февраля 2011

Я бы посмотрел на какую-то структуру поиска данных, например, на хэш-карту, например,

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...