当前位置:  开发笔记 > 编程语言 > 正文

在java中使用long as ArrayList索引

如何解决《在java中使用longasArrayList索引》经验,为你挑选了3个好方法。

我正在编写这个java程序,使用Sieve of Eratosthenes找到所有素数达到num,但是当我尝试编译时,它说我不能使用long var作为数组索引,并且它期望一个int var in它的位置.但我会使用大数字,所以我不能使用int.我能做什么?

import java.util.*;
import java.lang.*;

public class t3{
    public static void main(String[] args){
        long num = 100;

        //declaring list and filling it with numbers
        ArrayList numlist = new ArrayList();
        for(long x=2 ; x

Uri.. 15

我不确定为什么你的代码会编译开始.

你不应该在数组列表中使用[]来访问成员.arraylist只是一个内部存储在数组中的列表.您必须使用list get操作(仍然是O(1)).写入numlist [index]意味着你在numlist中有一个对象数组.你不能像在C++中那样覆盖[]操作.

另外,Java中的int是32位.有一个长度大于2 ^ 32的数组(所以你需要长索引)是不太可能的,我甚至不确定规范允许它.



1> Uri..:

我不确定为什么你的代码会编译开始.

你不应该在数组列表中使用[]来访问成员.arraylist只是一个内部存储在数组中的列表.您必须使用list get操作(仍然是O(1)).写入numlist [index]意味着你在numlist中有一个对象数组.你不能像在C++中那样覆盖[]操作.

另外,Java中的int是32位.有一个长度大于2 ^ 32的数组(所以你需要长索引)是不太可能的,我甚至不确定规范允许它.


`2 ^ 31`,`int`已签名.

2> wowest..:

通过32位signed int索引实现long [],你可以处理16GB的RAM.

如果你真的很认真地使用筛子来获得大质量数,那么你现在就不会想到几件事:

盒装长片的ArrayList

使用[]像Uri提到

没有系统地分页到磁盘



3> Zach Scriven..:

在Java规范限制阵列至多Integer.MAX_VALUE的元素.虽然a List可能包含更多元素(对于Collections 通常也是如此),但您只能使用索引添加/获取/删除/设置它们int.

假设你有很多元素的内存(我认为这不太可能),你可以编写自己的数据结构,包括"连接"数组.的get()set()方法将采取long索引,并计算出相应的阵列和int该阵列内的索引.

此外,我建议使用布尔值来表示每个数字的状态,而不是显式地存储/删除每个数字.这样会更好,因为(1)布线占用的空间小于长,而(2 ArrayList)在元件移除期间移动元件(如所做的那样)可能很昂贵.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有