2

以这个构造函数为例:

private final List<ArrayList<Integer>> adjList;
public Graph(int vertexCount) {
        adjList = new ArrayList<ArrayList<Integer>>(vertexCount);
        for (int i = 0; i < vertexCount; i++) {
            adjList.add(new ArrayList<Integer>());
        }
    }

这是有人想要一个顶点列表,他只需提供顶点即可。

   public List<Integer> adj(int vertex) {
        return adjList.get(vertex); 
    }

现在,如果顶点没有任何节点连接到它,那么返回值将是大小为 0 的列表。通过添加显式检查返回一个 Collections.Empty_List 是否有好处:如果列表大小为 0 那么返回 Collections.Empty_List ?

4

2 回答 2

1

无需这样做,您已经实例化了空列表。

您可以做的是使用return Collections.unmodifiableList(adjList.get(v)),以便您的用户Graph无法修改内部

于 2013-08-14T18:58:20.800 回答
1

您应该返回一个ImmutableList,我认为这可以更好地表达您的意图(返回的集合不应该被修改)。

return ImmutableList.copyOf(adjList.get(vertex));

也许您可以更改方法的返回值,ImmutableList以便客户可以看到他们甚至不应该尝试更改它。前提是您可以使用Guava

于 2013-08-14T18:59:59.147 回答