gpt4 book ai didi

java - 在 Java(1.5 或更高版本)中,从 Set 中获取(任何)元素的最佳执行方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:38 25 4
gpt4 key购买 nike

在下面的代码中,我需要从 toSearch 获取一个元素,任何元素。我无法在 Set 接口(interface)定义上找到一个有用的方法来返回集合中的一个(随机的,但不需要是随机的)成员。因此,我使用了 toArray()[0] 技术(出现在下面的代码中)。

private Set<Coordinate> floodFill(Value value, Coordinate coordinateStart)
{
Set<Coordinate> result = new LinkedHashSet<Coordinate>();

Set<Coordinate> toSearch = new LinkedHashSet<Coordinate>();
toSearch.add(coordinateStart);
while (toSearch.size() > 0)
{
Coordinate coordinate = (Coordinate)toSearch.toArray()[0];
result.add(coordinate);
toSearch.remove(coordinate);
for (Coordinate coordinateAdjacent: getAdjacentCoordinates(coordinate))
{
if (this.query.getCoordinateValue(coordinateAdjacent) == value)
{
if (!result.contains(coordinateAdjacent))
{
toSearch.add(coordinateAdjacent);
}
}
}
}

return result;
}

我看到讨论的另一种技术是用“toSearch.iterator().next()”替换“(Coordinate)toSearch.toArray()[0]” >”。 toArray() 或 iterator() 哪种技术最有可能执行得最快且对 GC(垃圾收集)的影响最小?

我的直觉(在写完这个问题之后)是使用迭代器的第二种技术在执行速度和 GC 开销方面都会更快。鉴于我不知道传递的 Set 的实现(假设最有可能是 HashSet 或 LinkedHashSet),每个 toArray() 或 iterator() 方法会产生多少开销?对此的任何见解将不胜感激。

问题(从上面重复):

  1. toArray() 或 iterator() 哪种技术最有可能执行得最快且对 GC(垃圾收集)的影响最小?
  2. 鉴于我不知道传递的 Set 的实现(假设最有可能是 HashSet 或 LinkedHashSet),每个 toArray() 和 iterator() 方法会产生多少开销?

最佳答案

toSearch.iterator().next() 会更快,占用内存更少,因为它不需要复制任何数据,而 toArray 会分配和复制集合的内容放入数组中。这与实际实现无关:toArray总是必须复制数据。

关于java - 在 Java(1.5 或更高版本)中,从 Set 中获取(任何)元素的最佳执行方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com