java数组大小,java数组大小函数

发布时间:2023-01-09

本文目录一览:

  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 返回带同样内容的新数组
 */
private static 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()测试用例
public static void main(String[] args) {
    int[] a = {1,2,3};
    a = (int[])resizeArray(a, 5);
    a[3] = 4;
    a[4] = 5;
    for (int i=0; i < a.length; i++) {
        System.out.println(a[i]);
    }
}

JAVA如何比较两数组大小

arr[0].subString[0]num[0].subString[0] 两个数组第一个数比较大小

for(int i=0; i < arr.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; i > 0; i--) {
    for(int j = arr.length - 1; j > 0; j--) {
        if(arr[j] > arr[j - 1]) {
            temp = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = temp;
        }
    }
}
for(int i = 0; i < arr.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; i < arr.length - 1; i++) {
    for(int j = i + 1; j < arr.length; j++) {
        if(arr[j] > arr[i]) {
            temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
}
for(int i = 0; i < arr.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:以上测试,我只是定义这么长的数组,并没有对这些数组进行操作,所以不敢保证实际操作数组时不报错(我偷懒了) 而且,我只是对整型数组进行测试,没有对其他类型数组测试,不敢保证其他类型数组是否也符合这个结论(又偷懒了) 如果有错误,希望大家指出来,不要客气!