gpt4 book ai didi

java - 迭代 fastutil 原始 ArrayList 的最佳实践,例如整数数组列表?

转载 作者:行者123 更新时间:2023-12-01 16:41:23 28 4
gpt4 key购买 nike

fastutil library 中的 IntArrayList 进行读取迭代的最佳方式是什么?在Java 中?

fastutil 是一个用于提高性能的库,其性能高于标准库的集合类和算法的性能。因此,在这种情况下,“最佳”意味着最佳性能。

我已关注advice in the fastutil docs并将我的 IDE (Eclipse) 设置为在装箱发生时发出警告:窗口 -> 首选项 -> Java -> 编译器 -> 错误/警告 -> 潜在编程问题 -> 装箱和拆箱转换 -> 设置为警告
然而,Eclipse 似乎忽略了一些警告。有关详细信息,请参阅下面的代码。

到目前为止,我在迭代中遇到了这些替代方案:

IntArrayList list = ...;

// 1. for-loop-with-index-variable
for (int i = 0; i < list.size(); i++) {
// do something with list.getInt(i)
}

// 2. for-each-loop-with-wrapped
Integer value = list.getInt(0); // Eclipse correctly warns in this line
for (Integer element : list) { // autoboxing happens here somewhere, but Eclipse does NOT warn
// do something with element
}

// 3. for-each-loop-with-primitive
for (int element : list) { // Eclipse does NOT warn. Does autoboxing happen here?
// do something with element
}

// 4. forEach-method-with-consumer
list.forEach((int element) -> {
// do something with element
});

// 5. for-loop-with-IntIterator
for (IntIterator iter = list.iterator(); iter.hasNext();) {
// do something with iter.nextInt()
}

最佳答案

自动装箱肯定会发生在#2 和#3 情况下。我认为#1 或#5 在性能方面是最佳的。

取自 Fastutil 文档 https://fastutil.di.unimi.it/docs/index.html :

Note that the “for each” style of iteration can hide boxing and unboxing: even if you iterate using a primitive variable (as in for(long x: s), where s is a LongSet), the actual iterator used will be object-based, as Java knows nothing about fastutil's type-specific next()/previous() methods.

关于java - 迭代 fastutil 原始 ArrayList 的最佳实践,例如整数数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61855626/

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