【问题标题】:Java Set / Collections issueJava 集/集合问题
【发布时间】:2015-12-31 14:38:02
【问题描述】:

我刚刚开始使用 Java,并且有一些关于集合的相当基本的问题。我想创建一个名为 DirectedGraph 的类,它有两个属性,一组顶点和一组边。用于这些集合的最佳数据结构是什么?似乎 Java 有几种集合的实现,我可能只想使用最基本、无特征的那种。

此外,当我尝试设置属性 verticesedges 时,我收到诸如“设置无法通过类型解析”或“语法错误,插入“维度”以完成参考类型”之类的错误。这是一些代码以及我尝试注释掉的其他内容:

import java.util.Collections;

public class DirectedGraph {
    private Set<> vertices;

    // here are some other guesses that also didn't work:
    // private Set<int[]> vertices;
    // private Set<Integer> vertices;
    // private Set<Integer> vertices = new HashSet<Integer>();
}

这些错误是怎么回事?

编辑:

如果我想要一个不带参数但将 verticesedges 集初始化为空的构造函数,我该怎么做?

【问题讨论】:

  • 您只是缺少导入。 import java.util.Set
  • 谢谢,我需要使用整数而不是整数?我之前尝试过导入 java.util.Set,但我想我这样做时在类中使用了错误的代码。
  • 集合只能保存引用类型。不是原始类型。 Integer 是引用类型,int[] 是引用类型,而 int 是原始类型。要初始化一个空的、可变的集合,您可以使用new HashSet&lt;&gt;()new TreeSet&lt;&gt;()(或您希望使用的任何其他集合实现)。对于不可变的空集,使用Collections.emptySet()。 Java 教程:docs.oracle.com/javase/tutorial/collections 和 javadoc:docs.oracle.com/javase/8/docs/api/java/util/Set.html 涵盖了您的所有问题
  • @dsaxton 请仔细阅读我的回答。 java.lang 之外的每个类都需要导入。 HashSet 就是其中之一;)。

标签: java collections set


【解决方案1】:

您只是缺少Set 类的导入语句。 Every class outside of the java.lang package needs to be explicitely imported.

import java.util.Collections;
import java.util.Set; // <-- needs to import Set to use it

public class DirectedGraph {
    private Set<> vertices;

    // here are some other guesses that also didn't work:
    // private Set<int[]> vertices;
    // private Set<Integer> vertices;
    // private Set<Integer> vertices = new HashSet<Integer>(); // <-- this would need "import java.util.HashSet" to compile
}

你所有的猜测都是正确的。 You can't use a primitive type here 但您可以使用int[](它不是原始类型,它是一个对象,是ints 的数组)和Integer(对应于java.lang.Object 类)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多