hashset替代了arraylist在性能上的缺陷

hpxqektj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(374)

在我的一个项目中,我使用了 ArrayList<ArrayList<Integer>> 作为图形数据结构。
所以图表是:

将等同于以下列表:

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

我选择 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];

有时我需要得到一个,两个或最多三个元素。
有没有改进第二个实现性能的想法?

zfycwa2u

zfycwa2u1#

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()); 
}

有时您只需要很少的值,所以相应地迭代。

相关问题