代码之家  ›  专栏  ›  技术社区  ›  Vinayak Dwivedi

我有一个hashset,它只想打印两个没有迭代器或for循环的对象。但我有错误吗?

  •  -1
  • Vinayak Dwivedi  · 技术社区  · 9 年前

    如何检查

    HashSet h=new HashSet();
    h.add(123);
    h.add(456);
    h.add(789);
    h.add(757);
    h.add(989);
    System.out.println( h.toArray(new String[2]));
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Stephen C    9 年前

    首先,您不应该使用 未经加工的 像这样的类型。这个 HashSet 应该 指定typ参数应该是什么。

    您在示例中所做的是将整数放入哈希集中。因此,您需要将其声明/初始化为 HashSet<Integer> 这样地:

    HashSet<Integer> h = new HashSet<>();
    

    然后,将内容提取到数组中,您应该这样做:

    Integer[] a = h.toArray(new Integer[h.size()]);
    

    看看前两个元素。

    没有API允许您仅提取前两个元素作为数组,但您可以通过手动分配数组并迭代集合来提取“前”两个元素来实现这一点。(当然注意到HashSet元素的顺序是 未指明的 …因此,预测您将获得哪些元素将很困难。)


    你没有说你经历了什么错误,但我想这是一个 ArrayStoreException 你的 哈希集 包含 Integer 对象,并且不能将 整数 变成一个数组 String .

        2
  •  0
  •   Jens    9 年前

    您正在将Integer值存储在Set not String中

    这应该对您有效:

    HashSet<Integer> h=new HashSet<>();
    h.add(123);
    h.add(456);
    h.add(789);
    h.add(757);
    h.add(989);
    System.out.println((new LinkedList<T>(h)).subList(0, 2));