日期:2014-05-20  浏览次数:20622 次

java的数组下标的非常严重的问题,异常不爽
java的数组下标:

  Array[<indexx>]

这个<index>是int类型的,我试过用long型表示下标:

Java code

    char array[] = new array[10];
    long i = 1;
    array[i] = '\n';



根本通不过编译,我觉得这样的设计太不行了,因为我用来表示长度、大小的全是long型,但是坑爹的java只允许int表示下标,我表示...C/C++就真的自由,公司需要Java我才学的Java,不料这么...

我想大家肯定会跟我说为什么要用long表示,int就够了。
我想说,long表示下标我都觉得不够,动辄上亿的数据量,以TB、PB、为单位的数据量,int能用个鬼。
别觉得不切实际,以后大家的硬盘、内存的容量不知道会大到什么程度,存储啊、用于分析什么什么的需要的容量更是天文数字,CPU的单位也进入64了,我估计128、512也不远了。int21亿的表示范围已经不够用了。

问大家有没有什么能编译器支持long表示下标的选项什么的,有什么方法能让long表示下标的都行,谢谢大家了。

------解决方案--------------------
君子善假于物也。而这个基础是你必须先认识清楚这些“物”。以楼主所说情形,你是这个基本功还没做好。

无论你是用C++还是JAVA,这都是没什么可辩驳的。相反,你用C++的东西来套在JAVA上,那就是你自己的不对了,不是吗。
------解决方案--------------------
楼上有人说List的,应该最看一下List的API。
E get(int index)
------解决方案--------------------
探讨

各有所用,lz你选择错了。java中对集合分的较细的 array只能用来承载小数据量的集合,大的用集合类了:List、Set、Map...
根据使用场景合理选择。

------解决方案--------------------
数组是连续分配的内存,对于32位系统,寻址的限制,操作系统可以分配给JVM堆的连续内存<2G, 实际数值要更小一些,所以JVM的数组使用int已经足够用了,当然64位系统可以分配更大的堆。像楼上说的多维数组也可以。但我觉得如果真的需要那么大的数组,还是要重新衡量一下架构方案,就算是操作系统,分配连续大内存也是一个重量级的操作,可以想象各种挪腾。。。




------解决方案--------------------
呵呵~自己看吧 http://topic.csdn.net/u/20110909/22/b78a8691-abdc-46c6-8bd3-e5bdcf433448.html

其中最核心的
探讨

32位机器上,通常的编译器都是int和long一样的32位……

大约20亿的上限,无符号就是41亿多……

malloc的参数size_t,x64下size_t是long long,2^64

不知楼主在说什么,难道是TC……



2^64就是16EB=16*1204PB=16*1024*1024TB

在EB面前,TB和PB算个鸟