java的数组下标: Array[<indexx>]这个<index>是int类型的,我试过用long型表示下标:
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表示下标的都行,谢谢大家了。
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表示下标的都行,谢谢大家了。
换list吧
在JDK中集成了许多在这个散列表中增,删,改,查的方法。用起来很方便。比数组的便利好多了。
就算你用C++,就算有上亿的数据就算你有这样的需求,你会把21多亿的数据一次性加载到内存里面来处理吗?
所以最大索引值和数组是一样的。
const int64_t i64=2222222222222L;
char cs[i64];
C/C++表示,一样不行。
有的编译器可能能编译过去,但运行出错。
E get(int index)
根据使用场景合理选择。
NO,这些封装真正要用时,根本没用。一般来说,像每秒上亿条数据查询、
排序TB级的数据,这么大的数据量分析、查询本来应该是要用C的,但是
因为要适应Linux/Unix/M$多种平台,所以才用Java。Java的性能我其实是
看好的。但是这个下标问题让人蛋疼。真的,C的灵活性非常舒服,Java满
地的类/对象/封装。类最大的缺点就是用无法表达现实世界的面向对象来强
制开发者面向对象(你知道一个类改一点能影响多少地方吗)
数组就是个例子,别提什么列表/集合,都是一层层的封装,没区别,线性/非线性
而已。Java固定了int的大小,long各个数据类型的范围,不过这么重要的
数组却载在int上面,狠狠的抽了我一脸。2.小则百万,大则千亿这就是目前的数据量,请大家看远一点,无论如何,
Java把数组大小固定在int(21亿)我觉得非常不妥。3.有些超高要求的应用,必须面临内存划分,只有数组是最理想的,静态数组
效率最高。完了,说着说着我都不知道自己在扯什么东西了
面向对象和封装从来不是给你做提升运行效率的,任何的封装只会降低那么一点效率,换来的是代码的可读和安全性,你这动辄要开几个G内存的东西还是用C实现吧,不过我也很想问一个数组就开这么大,用C做海量数据分析的程序员都是这么干的么?一下子开个T级别的数组?没认真研究过Java就这里嚷嚷……
你认为List,Set,Map能承载多大?楼主已经明确的说了,Int的最大值都满足不了的数组。
你认为List,Set,Map可以满足吗?
你回去看看。
List get
size 这些方法需要什么,会返回什么。
您在大型机上写代码吗?一次开TB数组? 把这段话放C 区也让人笑话。
我表示我的言语不代表C程序员的观点。我的问题只是“Java的[数组下标]不能用long型变量表示”
蛋疼
想当喷子也得掂量掂量自己
既然不是一个数组,每个数组中你也存不到21亿个元素,追求用long坐下标有什么用,
就算让你用long坐下标,你用得着么,你用long做下标本来是你的毛病,不管什么语言,
c++的异常机制是鸡肋,但在java中异常机制是普遍使用的重要的机制
java一贯使用继承,而c#更多使用组合代替继承
...
我想说的是:
首先,楼主先做一个确定,在你当前使用的机器,linux吧,分配一个2^63-1个元素的数组并给最后一个元素赋值,看看结果其次,借用上面连接的一句话,“难道我要处理1TB的数据就要用1TB的内存吗?”naive啊!任何语言的入门级别的人都喜欢这么干,根本不懂算法
‘\n’是一个转义字符,最后作一个字符处理!
byte a = new a[100];
a[i] = 'a';这段给我通过都行啊,就是这么限制。
自动把i转成int都行啊反正又没溢出。我都习惯用long不用int了,不管是下标还是什么,或许是强迫症吧,
又或者单纯的看int不爽?楼主2?
写着:
The index expression undergoes unary numeric promotion (§); the promoted type must be int.然后LZ就开始想怎么滴把i自动从long转成int了,,,,
我用的整形变量是都是long...
这是一个很无聊的吐槽。。
是啊,挺无聊的,我不过是看你说动则GB或者TB的数据量,然后跟数组的下标联系起来,然后说Int不够用,我才吐着个曹的。其实我可以理解,你可能没有真正处理过大数据量以及高并发的问题才这么说的。
还有,内存无论怎么发展,无论变得多大,总是不够用的,因为相应的,到了那个时候程序本身也会随着变得巨大起来。更何况,int的位宽也会随着将来的发展而改变,也许以后int就会变成64位或者128位了,不过那是以后的事情了。
还有pc的发展不会像你想象的那么快的,16到32 32到64 每次位宽的提升,差不多都用了10年的时间,我想64到128,差不多也要这么多时间,并不是说硬件生产商没有那种技术,而是为此位宽的提升都意味着要抛弃之前位宽的程序,对于新位宽的支持,必须重新开发编译器和软件(至少要重新编译),而且现在已经有128位的处理芯片,只不过在专业的平台上。
不知道我这样理解有没有问题。当然我要在喷一下,只是因为单纯的想要用long而来这吐,没有理由的浪费内存,这种程序员实在太扯了。