HashSet存儲書名,不允許存儲重複書名,但是當某一書名被修改後,不能再删除了?
package cn.itcast.review;
import java.util.HashSet;
import java.util.Iterator;
/*
集合
單例集合
----------| Collection 單列集合的根接口
----------------| List 如果是實作了List接口集合類具備的特點: 有序,可重複。
-------------------| ArrayList 底層使用Object數組實作的。 特點: 查詢速度快,增删慢。
-------------------| LinkedList 底層是使用了連結清單資料資料結構實作的。 特點: 查詢慢,增删快。
-------------------| Vector(了解) 底層使用Object數組實作的, 實作與ArrayList是一樣,隻不過是線程安全的,操作效率低。
----------------| Set 如果是實作了Set接口集合類具備的特點: 無序,不可重複。
------------------| HashSet 底層使用的是哈希表實作的。
------------------| TreeSet 底層使用二叉數實作。
雙列集合:
--------| Map (隻需要把Map接口的方法全部練習一次即可。)
-----------| HashMap 底層使用的是哈希表實作的。
-----------| TreeMap 底層使用二叉數實作
-----------| HashTable(了解)
*/
class Book{
String name;
double price;
public Book(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public int hashCode() {
return this.name.hashCode();
}
@Override
public boolean equals(Object obj) {
Book b = (Book)obj;
return this.name.equals(b.name);
}
@Override
public String toString() {
return "[書名:"+ this.name+" 價格:"+this.price+"]";
}
}
public class Demo15 {
public static void main(String[] args) {
//不允許重複的書名存在。
HashSet<Book> books = new HashSet<Book>();
books.add(new Book("深入javaweb",34));
books.add(new Book("java神書",78));
//修改書名
Iterator<Book> it = books.iterator();
while(it.hasNext()){
Book b = it.next();
if(b.name.equals("java神書")){
b.name = "java程式設計思想";
}
}
//為什麼修改名字之後不能删除了呢?
books.remove(new Book("java神書",78));
System.out.println("集合的元素:"+ books);
}
}
記憶體分析