【问题标题】:If only one element in a hashset, how can I get it out?如果哈希集中只有一个元素,我怎样才能把它拿出来?
【发布时间】:2014-05-11 17:29:19
【问题描述】:
HashSet<Integer> set = new HashSet<Integer>();
set.add(1);

我怎样才能把1 拿出来?我可以通过for(integer i : set) 做到这一点。您有其他解决问题的想法吗?

我指定的问题是“给定一个整数数组,每个元素出现两次,除了一个。找到那个唯一的。” 如果集合不包含它,我想将元素添加到集合中,并在循环期间删除存在的元素。最后剩下的元素是答案。不知道怎么退货。

    public static int singleNumber(int[] A) {
    HashSet<Integer> set = new HashSet<Integer>();
    for (int a : A) {
        if (!set.contains(a)) {
            set.add(a);
        } else {
            set.remove(a);
        }
    }
    /**
     * for(Integer i : set) { return i; }
     *return A[0];//need one useless return
    /**
     * while(set.iterator().hasNext()) { return set.iterator().next(); }
     * return A[0];//need one useless return
     */
    return set.toArray(new Integer[1])[0];
}

【问题讨论】:

  • 这是唯一的方法。 Set 不提供任何数据检索方法。
  • 知道你想要这个做什么可能会很有趣。您的用例...
  • “拿出来”是什么意思。是检索还是删除?
  • @AlexandreSantos OP 可以通过for(integer i : set) 完成,这意味着 OP 对数据检索而不是数据删除感兴趣。
  • @Luiggi,你确定吗? keySet 方法呢。

标签: java hashset


【解决方案1】:

set.iterator().next()

仅当您确定集合中有一个元素时才这样做。否则next() 会抛出异常。

【讨论】:

  • 我已经尝试过类似return set.iterator().next(),它会返回异常。
【解决方案2】:

只需尝试使用HashSet#toArray() 方法

HashSet<Integer> set = new HashSet<Integer>();
set.add(1);

if (set.size() == 1) { // make sure that there is only one element in set
    Integer value = set.toArray(new Integer[1])[0];
    System.out.println(value);//output 1
}

【讨论】:

    【解决方案3】:

    典型的解决方案包括检查当前迭代器位置是否有通过setIterator.hasNext() 的任何左元素,仅当有一个额外的元素未检查时才返回true。例如

    HashSet set = new HashSet(); 
    Iterator setIterator = set.iterator();
    while(setIterator.hasNext()){
       String item = setIterator().next();
       ...
    }
    

    【讨论】:

      【解决方案4】:

      如果您知道元素是什么并且只想清空集合,则可以使用remove(Object o)(或clear())。如果您不知道它是什么并且想在不删除它的情况下查看它,请使用迭代器。如果您不知道它是什么并且想要删除它,您应该使用迭代器的 remove() 方法来使用迭代器。这是从集合中删除元素的安全(和推荐)方法。由于 Set 是无序的,因此很难指定要删除的内容。对于任何集合,通常只有在遍历集合时才能知道要删除的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2023-03-23
        • 1970-01-01
        • 2014-12-04
        • 2014-01-28
        • 2019-11-12
        相关资源
        最近更新 更多