java - 用HashMaps替换 ArrayLists

  显示原文与译文双语对照的内容
0 0

我目前正在研究一个项目,我正在用HashMaps代替代码中的ArrayLists,我遇到了一个问题。 在我的代码部分,我从我的书籍类创建一个新的"书籍",在"获取图书"部分中我有问题。 我试着检查( 现在) 卷的书籍,看看从 getId() 方法的图书ID是否匹配图书对象的bookID 。 我应该如何使用图书对象遍历我的HashMap?

这是我的HashMap: HashMap<String, String> books = new HashMap<String, String>();

 if (users.containsValue(new User(userID, null, 0)) 
 && books.containsValue(new Book(bookID, null))) {
//get the real user and book 
 Book b = null;
 User u = null;
//get book
 for (Book book : books) {
 if (book.getId().equalsIgnoreCase(bookID)) {
 b = book;
 break;
 }
 }
时间:原作者:5个回答

0 0

你可能需要这样的东西。 我用了名字而不是,但我希望你得到漂移。"。

//setting up the test
HashMap<String, String> borrowers = new HashMap<String, String>();
borrowers.put("Lord of the Rings","owlstead");
borrowers.put("The Hobbit","sven");
borrowers.put("Vacuum Flowers","owlstead");
//find out what I borrowed from the library
String userID ="owlstead";
List<String> booksBorrowed = new ArrayList<>();
//iterating through the books may not be very efficient!
for (String bookName : borrowers.keySet()) {
 if (borrowers.get(bookName).equals(userID)) {
 booksBorrowed.add(bookName);
 }
}
//print instead of a return statement
System.out.println(booksBorrowed);
原作者:
0 0

在你的Hashmap中只有字符串。 无书籍。

如果没有图书中的图书,你将永远不能从它获得一个书籍对象。

如果要使用字符串对象识别图书对象,则一个onclick工作,但必须以这种方式设置它:

HashMap<String, Book> books = new HashMap<String, Book>();

下面是一个关于如何将Hashmap与Book对象一起使用的完整示例:

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"));
 }
}

为什么要使用字符串来标识对象? 这些字符串不唯一,所以如果两本书具有相同的ID,那么你将遇到问题。 我将对象的ID作为数据字段添加到对象本身。 将,的关联设置为tmodel中的对象,但是非常失败。 没有地图关联就消失了。 它也很容易出错,因为字符串中的字符串不能被编译器缓存。 运行时可能遇到一个 NullPointerException 。

特别是,你的用户类也有这样的"id",我想知道你是否将这个类添加到每个类中。 若要标识对象,只需使用对对象的引用。 如果你的变量名中有一个引用对象的错误,编译器将能够告诉你这样的错误。

原作者:
...