如何访问索引为long类型的数组元素

时间:2019-05-17 16:17:13

标签: java arrays types

每当我尝试从具有长数据类型索引的数组访问元素时,我都无法这样做。

我需要获取在某个索引处出现的字符才能与另一个字符进行比较。

我尝试使用Array类的getChar(),并尝试使用索引获取字符。以下是我尝试过的代码段。

试验1

for (long i = 0; i < len; i++) {
    c = Array.getChar(newArray, i);
    if (c != 'a') {
    } else {
        ctr++;
    }
}

审判2

for (long i = 0; i < len; i++) {
    c = newArray[(int) i];
    if (c != 'a') {
    } else {
        ctr++;
    }
}

预期-我应该获取要查找的索引的字符。

错误-可能会失去精度。

2 个答案:

答案 0 :(得分:0)

java中数组的最大大小为Integer.MAX_VALUE-2(在Java 8 Open JDK中):

//不编译

Object oArray[] = new Object[Long.MAX_VALUE];   

//线程“主”中的异常java.lang.OutOfMemoryError:请求的数组大小超出了VM限制

Object oArray[] = new Object[Integer.MAX_VALUE];  

//线程“主”中的异常java.lang.OutOfMemoryError:请求的数组大小超出了VM限制

Object oArray[] = new Object[Integer.MAX_VALUE - 1]; 

//没关系

Object oArray[] = new Object[Integer.MAX_VALUE - 2];

然后,不适合使用长索引类型,因为无法在最大值-2之后获得索引位置。

如果要创建大小大于整数限制的字符的“内存中”存储,则可以创建Map的实例:

Map<Long, Character> map = new HashMap();

答案 1 :(得分:0)

因为您的数组永远不能比toggleIcon = isMouseOver => this.setState({ isMouseOver }); ... onMouseEnter={() => this.toggleIcon(true)} onMouseExit={() => this.toggleIcon(false)} 大,所以通过整数(而不是长整数)访问它就足够了。

Integer.MAX_VALUE-2