gpt4 book ai didi

java - HashSet 代替 ArrayList 在性能上存在缺陷

转载 作者:行者123 更新时间:2023-11-30 05:52:33 27 4
gpt4 key购买 nike

对于我的一个项目,我使用了 ArrayList<ArrayList<Integer>>作为图形数据结构。

所以图表:

enter image description here

将相当于下面的列表列表:

enter image description here

但是我改变了我的数据结构 ArrayList<ArrayList<Integer>>Map<Integer, Set<Integer>> ,因此上面的相同图表现在将等同于 map :

enter image description here

我选择 Set 的原因之一是每个列表应该只包含唯一的元素。

Map的选择是为了便于操作数据结构。

问题是当我更改数据结构时,性能几乎下降了 2 倍。

以下是我的项目中最常用的操作:

在第一个实现中:

int index = someIndex();
int v1 = listoflists.get(index).get(0);
int v2 = listoflists.get(index).get(1);

在第二个实现中:

int index = somIndex();
Set<Integer> sets = map.get(index);
Integer[] set = sets.toArray(new Integer[sets.size()]);
int v1 = set[0];
int v2 = set[1];

有时我需要获取一个、两个或最多三个元素。

有什么想法可以提高第二个实现的性能吗?

最佳答案

Integer[] set =  sets.toArray(new Integer[sets.size()]);

上面的代码行增加了额外的复杂性。使用迭代器优化它,

int index = somIndex();
Set<Integer> sets = map.get(index);
Iterator iterator = sets.iterator();

while (iterator.hasNext()) {
System.out.println(iterator.next());
}

有时您只需要很少的值,因此需要进行相应的迭代。

关于java - HashSet 代替 ArrayList 在性能上存在缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650857/

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