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. }
内存分析

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值