使用shift运算符理解java数组初始化
我知道java中任何数组的最大大小都是Integer.maxValue。因为数组是整数索引的。但我知道,我们也可以使用移位运算符初始化数组。我试过了,但它抛出了奇怪的输出使用shift运算符理解java数组初始化,java,arrays,bit-manipulation,Java,Arrays,Bit Manipulation,我知道java中任何数组的最大大小都是Integer.maxValue。因为数组是整数索引的。但我知道,我们也可以使用移位运算符初始化数组。我试过了,但它抛出了奇怪的输出 int arr[] = new int[1<<5]; System.out.println(arr.length); arr = new int[1<<10]; System.out.println(arr.length);
int arr[] = new int[1<<5];
System.out.println(arr.length);
arr = new int[1<<10];
System.out.println(arr.length);
arr = new int[1<<20];
System.out.println(arr.length);
arr = new int[1<<25];
System.out.println(arr.length);
arr = new int[1<<40];
System.out.println(arr.length);
arr = new int[1<<111];
System.out.println(arr.length);
因此,如果有任何其他方法可以在适当的大小分配中初始化这样的数组,那么可以通过移动1100次来初始化大小为2^100的数组吗?您可以看到
System.out.println(1Integer.MAX\u VALUE
也是可以存储在int数组中的最大值(不仅仅是最大索引).print out1小修正1L>>100
只是零,可能意味着1L所以基本上我们不能创建大于整数max的数组,有没有办法创建大于整数max的数组?@AashishPawar没有办法。顺便问一句,为什么需要它?如果需要某种版本,可以使用HashMap
y非常大的数组,通过索引不断访问。另外,具有N个元素的int数组将立即在堆中分配N*4
字节。因此,对于大型数组,您将需要大量RAM
32
1024
1048576
33554432
256
32768
int[] arr = new int[1 << 100];
int[] arr = new int[1L << 100];