HashSet中出现的问题

HashSet存储书名,不允许存储重复书名,但是当某一书名被修改后,不能再删除了?

 
    
  1. package cn.itcast.review;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. /*
  5. 集合
  6. 单例集合
  7. ----------| Collection 单列集合的根接口
  8. ----------------| List 如果是实现了List接口集合类具备的特点: 有序,可重复。
  9. -------------------| ArrayList 底层使用Object数组实现的。 特点: 查询速度快,增删慢。
  10. -------------------| LinkedList 底层是使用了链表数据数据结构实现的。 特点: 查询慢,增删快。
  11. -------------------| Vector(了解) 底层使用Object数组实现的, 实现与ArrayList是一样,只不过是线程安全的,操作效率低。
  12. ----------------| Set 如果是实现了Set接口集合类具备的特点: 无序,不可重复。
  13. ------------------| HashSet 底层使用的是哈希表实现的。
  14. ------------------| TreeSet 底层使用二叉数实现。
  15. 双列集合:
  16. --------| Map (只需要把Map接口的方法全部练习一次即可。)
  17. -----------| HashMap 底层使用的是哈希表实现的。
  18. -----------| TreeMap 底层使用二叉数实现
  19. -----------| HashTable(了解)
  20. */
  21. class Book{
  22. String name;
  23. double price;
  24. public Book(String name, double price) {
  25. super();
  26. this.name = name;
  27. this.price = price;
  28. }
  29. @Override
  30. public int hashCode() {
  31. return this.name.hashCode();
  32. }
  33. @Override
  34. public boolean equals(Object obj) {
  35. Book b = (Book)obj;
  36. return this.name.equals(b.name);
  37. }
  38. @Override
  39. public String toString() {
  40. return "[书名:"+ this.name+" 价格:"+this.price+"]";
  41. }
  42. }
  43. public class Demo15 {
  44. public static void main(String[] args) {
  45. //不允许重复的书名存在。
  46. HashSet<Book> books = new HashSet<Book>();
  47. books.add(new Book("深入javaweb",34));
  48. books.add(new Book("java神书",78));
  49. //修改书名
  50. Iterator<Book> it = books.iterator();
  51. while(it.hasNext()){
  52. Book b = it.next();
  53. if(b.name.equals("java神书")){
  54. b.name = "java编程思想";
  55. }
  56. }
  57. //为什么修改名字之后不能删除了呢?
  58. books.remove(new Book("java神书",78));
  59. System.out.println("集合的元素:"+ books);
  60. }
  61. }
内存分析
HashSet中出现的问题_第1张图片
 

你可能感兴趣的:(javaSE,史上最全的JavaSE基础教程)