从Java中的Hashset中删除对象

时间:2016-12-13 20:31:37

标签: java

我有一个包含10个对象的Hashset,如何删除其中一个?这是代码,现在我需要创建一个删除一块披萨的方法"

    }

编辑:我要问的是,如果我有一个方法,我将如何删除单个切片或者这是不可能的:

public Slice removeSlice(){

TypedArray obtainStyledAttributes (AttributeSet set, 
                int[] attrs, 
                int defStyleAttr, 
                int defStyleRes)

5 个答案:

答案 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)

  1. 您必须在Slice类和所有扩展Penny类的类中重写equals方法。 需要使pizza.remove方法起作用。 例如,如果Slice的类型,大小和价格彼此相等,则Slice等于另一个。 (或任何其他属性)
  2. 然后你可以使用

    Slice sliceToRemove = new Slice(type,size,price);
    pizza.remove(sliceToRemove);
    
  3. 如果存在具有相同类型,大小和价格的切片,它将从Set中删除切片。

    无论如何,您必须拥有标识Set中切片的属性。

    如果不覆盖equals,则必须遍历Set,检查这些属性,然后删除它们是否匹配。