大家好,现在遇到了一个实际问题。一般情况下定义一个数组可以写成int size = 7;
booean[] visited = new boolean[size];但现在的问题是需要的数组很大,超出了int的表示范围,第一感觉是换成 long,即long size = 7;
booean[] visited = new boolean[size];但这样就直接报错了,提示不能把long转化为int.
还有,像List,ArrayList中获取第i元素的get(i)函数中的i都是int型,但都会涉及到长度大于int的最大值问题,大家遇到这个问题是怎么解决的?
先谢谢大家了。java 数组 超出 整型 最大长度
booean[] visited = new boolean[size];但现在的问题是需要的数组很大,超出了int的表示范围,第一感觉是换成 long,即long size = 7;
booean[] visited = new boolean[size];但这样就直接报错了,提示不能把long转化为int.
还有,像List,ArrayList中获取第i元素的get(i)函数中的i都是int型,但都会涉及到长度大于int的最大值问题,大家遇到这个问题是怎么解决的?
先谢谢大家了。java 数组 超出 整型 最大长度
比如你这里的boolean类型,用数组太浪费了,一个int有32位你用它的31位来表示boolean就行啊,位运算嘛。
你转化成一维数组将会对你的数据的查找带来很大的麻烦,这势必会对你这样大数据量的处理带来性能上的很大影响并且刚刚想了下,你的这些临时数据如果都是boolean值的话, 就算按照你转化成一位数组的话,将要花费掉将近400M的存储空间,这么大的数据是要驻留内存吗,如果是的话, 看你们的条件允许不?不允许的话那你们应该考虑一下算法的东西吧, 如果是要放到硬盘里面去,估计软件的性能会让你绝望
struct{
boolean b,
int i
}
32位机,int占4字节,即32位。以上结构体,占用8字节,原因是计算机会数位对齐,就是boolean同样占4字节(而不是1字节)struct{
boolean b, boolean b2, boolean b3, boolean b4,
int i
}
这个结构体同样占8字节。如果你用int代替boolean还是不够,可以参考一下C++的bitsets,bitsets可以自定义N位的一个bitset对象,但只能对位进行操作~ 不过我测试过,bitset最大是X位(我忘了多少,你可以试试),占10+M内存(sizeof输出来看)。后来我改进过,自己写一个类似bitset功能的类,容量只占很少(其实就是将int用数组连接起来,对每一个int的位操作,外部看起来就好像对一个超大的int操作)希望我的思路对你有帮助!