相关疑难解决方法(0)

增强的循环性能比传统的索引查找更差?

我刚刚看到这个看似无害的评论,对ArrayList和原始String数组进行基准测试.它来自几年前,但OP写道

我注意到使用String s:stringsList比使用旧式for循环访问列表慢约50%.去搞清楚...

没有人在原帖中评论它,测试看起来有点可疑(太短不准确),但是当我读到它时,我差点从椅子上掉下来.我从来没有对一个"传统"的循环增强循环进行基准测试,但我目前正在开发一个项目,它使用增强循环对ArrayList实例进行数亿次迭代,所以这是我关注的问题.

我打算做一些基准测试并在此发表我的发现,但这显然是我的一个大问题.我可以在网上找到关于相对性能的宝贵的小信息,除了一些随便提到的ArrayLists的增强循环在Android下运行速度慢得多.

有没有人经历过这个?这种性能差距是否仍然存在?我会在这里发布我的发现,但读到它时非常惊讶.我怀疑如果这个性能差距确实存在,它已经在更现代的VM中得到修复,但我想我现在必须做一些测试并确认.

更新:我对我的代码进行了一些更改,但是已经怀疑其他人已经指出的内容:确保增强的for循环速度较慢,但​​是在非常简单的紧密循环之外,成本应该是成本的一​​小部分.循环的逻辑.就我而言,即使我使用增强型循环迭代非常大的字符串列表,我在循环中的逻辑也足够复杂,甚至在切换到基于索引的循环之后我甚至无法测量差异.

TL; DR:增强循环确实比传统的基于索引的循环慢于arraylist; 但对于大多数应用来说,差异应该可以忽略不计.

java performance

10
推荐指数
2
解决办法
6093
查看次数

JPA数组映射

如何在JPA中映射双打数组.我有以下代码失败,因为hibernate无法初始化数组.

@Entity
public class YearlyTarget extends GenericModel {

    @Id
    public Integer  year;

    @ElementCollection
    public Double[] values;

    public YearlyTarget(int year) {
        this.year = year;
        this.values = new Double[12];
    }
}
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa playframework

7
推荐指数
2
解决办法
2万
查看次数

ArrayLists比数组慢2倍

我测试一个分子动力学算法,它具有,除其他外,一个类粒子组成由9阵列双打存储颗粒组分(速度,力和位置在3D环境中).

我使用5个输入大小测试算法:

Size (MB) Time (s)
0.06      0.36     (fits in cache L2)
0.14      1.79     (fits in cache L2)
0.60      36.86    (fits in cache L3)
1.35      182.24   (fits in cache L3)
17.38     566.55   (it only fits in RAM)
Run Code Online (Sandbox Code Playgroud)

比我改变Particles从布局arrayArrayList.为了有一个连续的内存块,我创建了arrayList,其大小将占用:

ArrayList <Double> px = new ArrayList <Double>(Input_Size);
Run Code Online (Sandbox Code Playgroud)

我在上述睾丸的相同条件下运行该版本,结果如​​下:

Size (MB) Time (s)
0.06      0.608
0.14      2.78
0.60      57.15
1.35      299.24
17.38     1436,42
Run Code Online (Sandbox Code Playgroud)

测试环境如下:

AMD Opteron处理器6174,800 MHz,12 MB高速缓存L3,具有24个内核;

我的速度降低了大约2倍.这是正常的吗?不应该期望在两个版本中几乎相同的时间,因为ArrayList在内存中像数组一样连续分配?

编辑:

Running with the …
Run Code Online (Sandbox Code Playgroud)

java performance

6
推荐指数
1
解决办法
1803
查看次数

存储在Arraylist或String数组中的输入?(新程序员)Java

在我看来ArrayList,几乎在每个场景中都会更容易使用,它非常通用.是否存在String[]用于存储输入数据的实例?如果出现这种情况,必然存在缺陷ArrayList,会是什么?

只有想到了我的头顶部的事情将是各种String类似的方法,substring()split()等.

编辑:StackOverflow的新手.如果这是重新发布,我道歉.并感谢格式化.

java arrays arraylist

6
推荐指数
1
解决办法
6532
查看次数

Array和ArrayList之间的性能或内存消耗差异

我发现ArrayList通过在日常编码中使用数组而不是使用数组,我几乎可以轻松地完成任何操作并且可以进行更多控制.所以我问:

  1. 如果我可以使用它,是否适合避免阵列ArrayList
  2. 当我用一个数组替换一个数组时,我需要考虑一下内存ArrayList吗?

java performance arraylist

6
推荐指数
1
解决办法
8960
查看次数

原始数组与ArrayList

我正在接收XML并需要转换为原始数组或ArrayList.在内存和垃圾收集方面,性能方面有很大差异吗?我的应用程序将每秒创建数千个这些对象,我需要最小化GC,因为我需要实时性能.

Thxs

java arrays arraylist

5
推荐指数
1
解决办法
8067
查看次数

使用 Guava 高效转换通用数组

我正在使用Java 7,并且我正在 Guava API 中搜索一种将函数应用于数组的方法,而不必先将其转换为集合。我愿意为此目的创建自己的类,但我不想重新发明轮子呵呵。

所以作为一个总结(如果你不知道我在说什么),这是我迄今为止发现的,你可以用 Guava 来做,以便将一个函数应用于数组,正如我所说的:

Integer[] someNumbers = new Integer[]{1, 2, 3};
Integer[] returnedNumbers = Collections2.transform(Arrays.asList(someNumbers), squareNumberFunction).toArray(new Integer[0]);

assertThat(returnedNumbers).isEqualTo(new Integer[]{1, 4, 9});//Using AssertJ here
Run Code Online (Sandbox Code Playgroud)

但我希望能够做这样的事情:

Integer[] someNumbers = new Integer[]{1, 2, 3};
Integer[] returnedNumbers = Arrays.transform(someNumbers, squareNumberFunction);

assertThat(returnedNumbers).isEqualTo(new Integer[]{1, 4, 9});
Run Code Online (Sandbox Code Playgroud)

理想情况下,我正在谈论的功能是type-safe


编辑

为了进一步澄清问题:

  • 我正在谈论的数组不是原始数组,它们引用复杂的对象(我只使用整数来轻松举例说明我在说什么)。
  • 我无法控制接收发送的结构,它们数组(想象一下遗留代码情况,如果您认为这有助于您更好地理解问题,那么这是可能的)。
  • 转换数组和访问它们时,效率是必须的

java arrays transform function guava

4
推荐指数
1
解决办法
5743
查看次数

实现字符串数据类型的二维矩阵的最佳数据结构是什么?

我有 150 行和 10 列的巨大表数据,每列都有字符串数据。存储数据后,我还必须遍历以找到特定值。因此,我正在寻找在这种情况下在性能、遍历灵活性方面的最佳数据结构的答案。

我想到了Array、ArrayList、Hashmap。

另外,我在 SO 上发现了类似的问题,但他们没有回答我的问题。

编辑:数据是字母和整数的混合。无法排序并且也包含重复项。

java data-structures

4
推荐指数
1
解决办法
3581
查看次数

什么工作得更快:二维数组或列表列表

我手头有表现情况.

我有大量的数据要以二维表格式(12000 X 2000)保存在内存中.现在据我所知,我可以使用int[][]List<List<Integer>>.当然,我使用int[i][j]或访问值list.get(i).get(j).我循环遍历整个数据至少五次.

您认为哪一个会更快地工作,如果您能回答,为什么?还有什么办法可以加快执行速度吗?

java -version给出: 操作系统是Windows Vista.
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)

java performance jvm nested-lists multidimensional-array

1
推荐指数
1
解决办法
4299
查看次数

Java:什么是基于索引的数组访问,为什么它们快?

我一直在阅读,ArrayList与其他一些数据结构相比,搜索更快,因为它是基于索引的LinkedList.我明白ArrayList内部使用的是Java array.这是来自Java的代码ArrayList,它将数据保存在array.

private transient Object[] elementData;
Run Code Online (Sandbox Code Playgroud)

什么是' 基于索引的数据结构 ',为什么它更快?

此外,什么是数组的内存模型(数组在堆栈/堆组合中的结构),以便我能理解为什么访问数组中的元素更快?

java arrays arraylist

1
推荐指数
1
解决办法
805
查看次数

如何打乱数组的内容

所以我的程序应该访问一个文本文档,然后做所有当前有效的爵士乐。我无法弄清楚的唯一问题是如何打乱数组的内容,而不会让它们最终彼此重叠。互联网和随机和 for 循环的多次尝试都没有结果。这是我的代码:

import java.io.*;
import java.util.*;
public class lab_6 {
public static void main(String[] args)throws FileNotFoundException {
    Scanner input = new Scanner(System.in); //reads from keyboard
    System.out.println("What is the name of your file. ");
    String name = input.nextLine();
    Scanner reader = new Scanner(new File(name));// Open text file
    System.out.println("how many names are in your array");
    int num = input.nextInt();
    String[] names = new String[num];    
    for (int index = 0; index< names.length; index++)
    {
        names[index] = reader.nextLine();// Gets a line while there …
Run Code Online (Sandbox Code Playgroud)

java arrays random shuffle

1
推荐指数
1
解决办法
3442
查看次数

Javascript数组比C++中的数组效率低

我正在读一本关于JS数据结构的书,它提到:

javascript中的数组被实现为对象,导致它们比使用其他语言(如C++和Java)构建的数组效率低.

为什么?

javascript arrays

1
推荐指数
1
解决办法
579
查看次数

何时使用Object []和List <Object>

可能重复:
何时在Java中使用List over Array?

正如标题所述,我试图找出何时使用某些类型的列表.我刚刚意识到我不知道这些Object [] - 列表是如何实现的,因此它们比List更受欢迎.也许只有当我知道列表的大小不会改变时,它们才是首选?我希望我的问题清楚.

干杯,

java

0
推荐指数
1
解决办法
301
查看次数