Есть только строк в вашем Hashmap. Нет книг.
Как нет книг в HashMap, вы никогда не сможете получить объект Book из него.
Если вы хотите, чтобы идентифицировать объекты книги с Струнные объектами, а Hashmap работает, но вы должны настроить его таким образом:
HashMap<String, Book> books = new HashMap<String, Book>();
Вот полный рабочий пример того, как HashMap может быть использован с Объекты для книг:
import java.util.HashMap;
public class Book
{
private String title;
private int pages;
public Book(String title, int pages)
{
this.title = title;
this.pages = pages;
}
public String toString()
{
return title + ", " + pages + "p.";
}
public static void main(String[] args)
{
//creating some Book objects
Book theGreatBook = new Book("The great Book of awesomeness", 219);
Book klingonDictionary = new Book("Klingon - English, English - Klingon", 12);
//the Map:
HashMap<String, Book> library = new HashMap<String, Book>();
//add the books to the library:
library.put("ISBN 1", theGreatBook);
library.put("ISBN 2", klingonDictionary);
//retrieve a book by its ID:
System.out.println(library.get("ISBN 2"));
}
}
Почему вы используете строки для идентификации объектов? Строки не уникальны, поэтому, если две книги имеют одинаковый идентификатор, вы столкнетесь с проблемами. Я бы добавил идентификатор объекта в качестве поля данных к самому объекту. Создание связи идентификатора с объектом в HashMap работает, но очень проигрывает. Без карты ассоциация ушла. Он также подвержен ошибкам, поскольку опечатки в ваших строках не могут быть кэшированы компилятором. Возможно, вы столкнетесь с NullPointerException во время выполнения.
Особенно потому, что у вашего класса User есть такой идентификатор. Мне интересно, добавляете ли вы это для каждого класса и хотите сказать, что на самом деле нет необходимости делать это (если у вас нет других причин). Чтобы идентифицировать объект, просто используйте ссылку на объект. Если у вас есть опечатка в одном из ваших имен переменных, ссылающихся на объект, компилятор сможет вам это рассказать.
Что вы намерены вставить в HashMap? Каков ключ и какая ценность? – Eran
Вы уверены, что вы правильно представляете свои книги 'HashMap' здесь? Какая информация содержится в книгах «HashMap»? 'books', похоже, не является ОК именем для объектов HashMap,' Map', которые должны использоваться для * отношений *, классов для композиции. –
Ваши намерения не ясны. Если вы можете объяснить лучше, мы можем помочь. И в вашем коде 'books' является hashMap со строковым ключом, и вы пытаетесь совместить строковый ключ с объектом, который никогда не будет правдой. – Dileep