如何在Java类中迭代私有集合成员?

如何在Java类中迭代私有集合成员?,java,private,public,Java,Private,Public,这个类有一个字段 堆栈已更改\u顶点并且它是私有的和可移植的。如果它是一个基元类型变量,我会编写一个getter来从其他类获取值。但是我需要从外部(从其他类)迭代这个堆栈 我可以实现什么样的“getter”来迭代这个堆栈?由于某些原因,我无法将其从私人更改为公共 谢谢。您有多种选择 只需返回堆栈: public Stack<Integer> getChangedVertices() { return changed_vertices; } 公共堆栈getChangedVer

这个类有一个字段
堆栈已更改\u顶点
并且它是私有的和可移植的。如果它是一个基元类型变量,我会编写一个getter来从其他类获取值。但是我需要从外部(从其他类)迭代这个堆栈

我可以实现什么样的“getter”来迭代这个堆栈?由于某些原因,我无法将其从私人更改为公共


谢谢。

您有多种选择

只需返回堆栈:

public Stack<Integer> getChangedVertices()
{
    return changed_vertices;
}
公共堆栈getChangedVertices()
{
返回更改的顶点;
}
将堆栈作为不可修改列表返回:

public List<Integer> getChangedVertices()
{
    return Collections.unmodifiableList(changed_vertices);
}
public List getchangeddverties()
{
返回集合。不可修改列表(已更改);
}
返回迭代器:

public Iterator<Integer> getChangedVertices()
{
    return changed_vertices.iterator();
}
public迭代器getChangedVertices()
{
返回已更改的_顶点。迭代器();
}
接受使用者,并将堆栈内容推入使用者

public void consumeChangedVertices(Consumer<Integer> action)
{
    changed_vertices.stream().forEach(action);
}
public void consumerchangeddverties(消费者行动)
{
更改了\u顶点.stream().forEach(操作);
}
等等


这完全取决于调用方需要做什么和/或应该允许调用方对堆栈做什么。

堆栈的副本?对其迭代器的引用?问题在哪里?问题是我是一个Java noob)不,我不想复制这个堆栈,因为它需要O(n)个时间。我能做什么?返回对堆栈的引用并使用此引用进行迭代?这是一种好的编程风格吗?如果希望客户端能够访问
堆栈及其所有操作,请返回
堆栈
。如果希望它们只能检索迭代器,请返回一个
Iterable
。如果您希望他们只能访问当前迭代器,请返回一个
迭代器
。在所有选项中,第一个选项似乎是最好的,因为它提供了更多的自由度。谢谢!