代码如下: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不能用新名字来删除
打错了
展开