java 容器删除时遇到的小问题 求解!
发布网友
发布时间:2022-05-12 11:00
我来回答
共3个回答
热心网友
时间:2023-10-06 04:17
提问者是不是向知道删除(remove)执行时,JAVA虚拟机执行的具体细节?!
1、当自定义一个对象时确实需要重写继承的equals和hashCode方法。这是定义判断两个对象的是否相同的方式。
2、Set接口及其实现类在集合中有点特殊:它的底层实现方式是MAP;它在判断集合中两个对象是否相等是先调用equals方法,若equals的返回值为true则调用hashCode方法。两者都满足则两个对象才满足。
3、1中在内存中开辟了一段内存并将引用放到C集合中,2、中再次开辟了一段内存并用集合的remove方法根据它的引用释放这段内存。在释放内存前会调用该对象对应类的equals方法和hashCode方法来获取判断相同的标准。
4、输出结果为false说明自定义对象没有重写equals和hashCode方法,Object的默认equals是比较两个对象的内存的地址。
热心网友
时间:2023-10-06 04:17
我们一般不使用两对象相等的方式来判断是否删除对象,一般是循环容器,然后比较每个对象的一个属性或多个属性来查找需要删除的对象。
Collection c=new HashSet();
c.add(new Name("f1","l1");
c.add(new Name("f2","l2");
//删除name为"f1"的对象
Name deleteObject = null;
for(Iterator iter = c.iterator();iter.hasNext()){
Name n = (name)iter.next();
if(n.getName().equals("f1")){
deleteObject = n;
break;
}
}
c.remove(deleteObject);
热心网友
时间:2023-10-06 04:17
放入HashSet/HashMap的类需要重写hashCode/equals方法。