我有一个包含10个对象的Hashset,如何删除其中一个?这是代码,现在我需要创建一个删除一块披萨的方法"
}
编辑:我要问的是,如果我有一个方法,我将如何删除单个切片或者这是不可能的:
public Slice removeSlice(){
TypedArray obtainStyledAttributes (AttributeSet set,
int[] attrs,
int defStyleAttr,
int defStyleRes)
答案 0 :(得分:0)
pizza.remove(slice)
将从散列集中删除一个“切片”。
答案 1 :(得分:0)
如果您没有办法创建等于其他HashSet
的{{1}}并且不存储切片,那么使用Slice
并没有多大意义在任何其他数据结构中。
在你的情况下,构造函数中没有参数可以帮助告诉另一个Slice
,这意味着所有切片都相等或者所有切片都是成对不同的。这意味着该集合最多包含一个切片(在这种情况下使用Slice
),或者在不迭代clear()
的情况下再次找不到切片。
在这种情况下,这会使Set
效率相当低HashSet
。
但是可以使用Collection
:
Iterator
这将删除Iterator<Slice> iterator = pizza.iterator();
if (iterator.hasNext()) {
iterator.next();
iterator.remove();
}
返回的第一个切片,这可能是任意切片。
答案 2 :(得分:0)
首先,您必须覆盖equals(Object o)
类中的Slice
方法,这有助于从Slice
中删除HashSet
对象。
从HashSet
中删除元素时,需要将传递的对象与已存在的对象进行比较。你必须写equals(Object o)
方法,你在考虑哪两个Slice
对象是相等的。
之后使用此pizza.remove(customSlice)
。
答案 3 :(得分:0)
Set接口有一个remove方法可以完成这项工作。确保Slice也实现了hashcode和equals,因为这会影响set方法的行为。
答案 4 :(得分:0)
然后你可以使用
Slice sliceToRemove = new Slice(type,size,price);
pizza.remove(sliceToRemove);
如果存在具有相同类型,大小和价格的切片,它将从Set中删除切片。
无论如何,您必须拥有标识Set中切片的属性。
如果不覆盖equals,则必须遍历Set,检查这些属性,然后删除它们是否匹配。