有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ArrayList的java更快访问版本?

有人知道类似于ArrayList的东西能更快地处理大量数据吗

我有一个程序,它有一个非常大的ArrayList,当它试图探索或修改ArrayList时,它会被阻塞

大概当你这么做的时候:

//i is an int;
arrayList.remove(i);

幕后的代码运行如下:

public T remove(int i){
    //Let's say ArrayList stores it's data in a T [] array called "contents".
    T output = contents[i];
    T [] overwrite = new T [contents.length - 1];
    //Yes, I know generic arrays aren't created this simply. Bear with me here...
    for(int x=0;x<i;x++){
        overwrite[x] = contents[x];
    }
    for(int x=i+1;x<contents.length;x++){
        overwrite[x-1] = contents[x];
    }
    contents = overwrite;
    return output;
}

当ArrayList的大小大约为几百万个单位时,所有这些重新排列数组中项目位置的循环都将花费大量时间

我试图通过创建自己的自定义ArrayList子类来缓解这个问题,该子类将数据存储分割成更小的ArrayList。任何需要ArrayList扫描其数据以查找特定项的进程都会为其中每个较小的ArrayList生成一个新的搜索线程(以利用我的多个CPU核)

但这个系统不起作用,因为当调用搜索的线程在任何ArrayList中同步了一个项目时,它会阻止这些单独的搜索线程完成搜索,这反过来会锁定在进程中调用搜索的原始线程,基本上会使整个程序死锁

我真的需要某种面向数据存储的类,能够以PC机的速度容纳和操作大量对象

有什么想法吗


共 (1) 个答案