天天看點

HashSet中出現的問題

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

記憶體分析