本文目錄一覽:
- 1、Java 數組有最大長度嗎
- 2、java數組的長度和大小有什麼區別
- 3、Java中如何重設數組的大小?
- 4、JAVA如何比較兩數組大小
- 5、java 比較數組中數值大小
- 6、Java數組的長度到底能有多大
Java 數組有最大長度嗎
java 中數組的最大長度是多少呢?看一下它的length屬性就可以了。length屬性是32位的有符號整數,它的最大值是2的31次冪,就是2G。為何有這個限制呢?為什麼length的屬性不是long型呢?我們假設一下,如果它是long型的,那麼它的最大長度是2的63次冪。內存永遠也不會有那麼大吧。即使是字節數組長度是int的,最大長都達到2GB.
由此想到了String,這個傢伙底層也是基於數組的,是一個字符數組。字符是16位的基本類型,一個String的最大長度是多少呢?就是字符數組的最大長度也是2G,佔用內存是4GB。
從JVM的角度來解釋:創建數組的字節碼是anewarray和newarray,操作數棧的字寬是32位,而這兩個字節碼的參數都是一個字長,所以無法接受long型的長度參數。不知道這樣解釋是否很牽強。
java數組的長度和大小有什麼區別
數組只有一個length,稱它長度或者大小都行。
而集合類如List就有元素個數size和容量的區別了。這些類的內部用數組存儲元素,size()方法可以獲得元素個數,容量是其內部用到的數組的長度。一般這個數組長度比已經存儲的元素個數要大,數組中有一部分空餘用來準備存儲新元素。當數組長度不夠用,則進行擴容,將現有元素移動到新的容量更大的數組中。
Java中如何重設數組的大小?
在Java中,數組不能動態重設大小。一個可替代方法是使用java.util.ArrayList (或者java.util.Vector)代替使用原始數組(array)。另一種解決方案是用一個不同大小的數組重設數組,將舊數組內容拷貝到新的數組。
/** * 使用一個新大小重設數組,並拷貝舊數組的內容到新數組 * @param oldArray 舊數組被重設 * @param newSize 新數組大小 * @return 返回帶同樣內容的新數組 */privatestatic Object resizeArray (Object oldArray, int newSize){ int oldSize = java.lang.reflect.Array.getLength(oldArray); Class elementType = oldArray.getClass().getComponentType(); Object newArray = java.lang.reflect.Array.newInstance( elementType,newSize); int preserveLength = Math.min(oldSize,newSize); if (preserveLength 0) System.arraycopy (oldArray,0,newArray,0,preserveLength); return newArray; }// resizeArray()測試用例publicstaticvoid main (String[] args) { int[] a = {1,2,3}; a = (int[])resizeArray(a,5); a[3] =4; a[4] =5; for (int i=0; i
JAVA如何比較兩數組大小
arr[0].subString[0]num[0].subString[0]兩個數組第一個數比較大小
for(int i=0;iarr.length;i++){
arr[i].subString[0]num[i].subString[0]
}
subString提取數組的下標的值。返回是字符串類型!
java 比較數組中數值大小
自己寫的話,可以用冒泡或者選擇排序:
都是從大到小的
冒泡:
int[] arr=new int[]{34,5,23,38,1,89,54,78,9,7};
int temp=0;
for(int i=arr.length-1;i0;i–){
for(int j=arr.length-1;j0;j–){
if(arr[j]arr[j-1]){
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
for(int i=0;iarr.length;i++){
System.out.println(arr[i]);
}
選擇排序:
int[] arr=new int[]{34,5,23,38,1,89,54,78,9,7};
int temp=0;
for(int i=0;iarr.length-1;i++){
for(int j=i+1;jarr.length;j++){
if(arr[j]arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
for(int i=0;iarr.length;i++){
System.out.println(arr[i]);
}
當然,也可以用Arrays.sort(arr)的方法排序,這種默認是從小到大排序的。
你可以試一下。
Java數組的長度到底能有多大
Java整型數組的最大長度到底有多長?
今天上網查了一下,各種說法都有,這個問題似乎總困擾我們Java初學者,無奈,只好自己試了一下,以下是我的測試代碼,如果有錯誤,還望不吝賜教!
使用eclipse默認的vm arguments,運行以下代碼:
public static void main(String[] args) {
byte[] array=new byte[61858764];
// short[] shortArray=new short[30929382];
// int[] intArray=new int[15464691];
// long[] longArray=new long[7732345];
}
成功,沒有報錯,可知在eclipse默認的vm arguments下,byte數組的最大長度是61858764,將近60M。
由於short的長度比byte大一倍,所以short數組的最大長度是30929382,是byte數組最大長度的一半,
以此類推,int數組最大長度是15464691,long數組最大長度是7732345
我以為這就是最終結果,後來突然想起修改虛擬機的最大內存,也是這個結果嗎?
我把eclipse的vm arguments設置修改為:-Xms256M -Xmx768M
再次測試代碼,發現byte數組的最大長度可以更長,
通過Windows任務管理器可知,運行代碼的javaw.exe進程佔用的內存也更大(廢話,呵呵)
到此為止,應該可以得出結論,通過修改虛擬機的最大內存,java整型數組的最大長度可以很長,但到底有多長?(肯定比內存小)
我試過定義一個byte數組的長度為618587640,將近600M,沒有報錯,更長的數組似乎沒有意義,我也沒有測試。
ps:以上測試,我只是定義這麼長的數組,並沒有對這些數組進行操作, 所以不敢保證實際操作數組時不報錯(我偷懶了)
而且,我只是對整型數組進行測試,沒有對其他類型數組測試,不敢保證其他類型數組是否也符合這個結論 (又偷懶了)
如果有錯誤,希望大家指出來,不要客氣!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311584.html