java 不可修改的集合对象_java集合:关于hashmap存储一个对象,中间改变对象的值,为什么再remove不能用新名字来删除...

代码如下:publicclassDemo1{publicstaticvoidmain(String[]args){HashSetsc=newHashSet<>();bookbook1=newbook("java书2",18);bookbook2=newbook("java书",99);sc.add(book2);...

代码如下:

public class Demo1 {

public static void main(String[] args) {

HashSet sc =new HashSet<>();

book book1=new book("java书2",18);

book book2=new book("java书",99);

sc.add(book2);

sc.add(book1);

System.out.println("原始"+sc);

Iterator it = sc.iterator();

while(it.hasNext()) {

book next = it.next();

if(next.name.equals("java书")) {

next.name="java神书";

}

}

System.out.println("更改名字之后"+sc);

sc.remove(book2);

System.out.println("删除book2之后"+sc);

}

}

class book{

String name;

int price;

public book() {

super();

}

public book(String name, int price) {

super();

this.name = name;

this.price = price;

}

@Override

public String toString() {

return "【书名:"+name+",价格"+price+"】";

}

//@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((name == null) ? 0 : name.hashCode());

result = prime * result + price;

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

book other = (book) obj;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

if (price != other.price)

return false;

return true;

}

}

输出的结果如下:

原始[【书名:java书,价格99】, 【书名:java书2,价格18】]

更改名字之后[【书名:java神书,价格99】, 【书名:java书2,价格18】]

删除book2之后[【书名:java神书,价格99】, 【书名:java书2,价格18】]

这个是为什么删不了呢?

另外的疑问:在hashset里面存储的是地址还是值?

更改了对象的成员属性在哈希表里面的位置变了吗?

问题是关于hashset存储一个对象,中间改变对象的值,为什么再remove不能用新名字来删除

打错了

展开

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值