Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中删除整数数组?_Java_Arrays - Fatal编程技术网

如何在Java中删除整数数组?

如何在Java中删除整数数组?,java,arrays,Java,Arrays,让我们假设我有一个数字N,N是数组的大小 int numArray [] = new numArray[N]; 但是,数组的内容将每隔一个从1到正N的数字保存一次。这意味着在for循环之后,整个大小为N的数组将不会满。因此,在for循环之后,我想修剪(或调整)数组,使数组中不再有任何空插槽 例如: 假设N=5; 这意味着,在for循环之后,从1到5的每隔一个数字将出现在数组中,如下所示: int arr[]=新的int[N] int arr[0]=1; int arr[1]=3; int ar

让我们假设我有一个数字N,N是数组的大小

int numArray [] = new numArray[N];
但是,数组的内容将每隔一个从1到正N的数字保存一次。这意味着在for循环之后,整个大小为N的数组将不会满。因此,在for循环之后,我想修剪(或调整)数组,使数组中不再有任何空插槽

例如:

假设N=5; 这意味着,在for循环之后,从1到5的每隔一个数字将出现在数组中,如下所示:

int arr[]=新的int[N]

int arr[0]=1;
int arr[1]=3;
int arr[2]= null;
int arr[3]= null;
int arr[4]= null;
现在,我想在for循环之后进行修剪(或调整大小),以便保留null的索引将消失,然后数组应该是:

int arr[0]=1;
int arr[1]=3;

数组的大小现在是2。

您当然最好使用一些更合适的数据结构,例如列表或集合,这取决于您以后对它的意图。这样,您甚至不需要创建一个N大小的结构,这样您就可以减少它。而是创建一个空列表并添加实际需要的元素,而不能修剪数组。最快的方法是使用System.arraycopy将其复制到较小的文件中,即:


在Java中,不能在数组创建后更改其大小。 然而,您可以做的是创建一个您需要的大小的新数组

另一个要点是,您正在创建一个基元数组:
int
。基本体不是对象,不能将值
null
指定给基本体。 如果希望能够将其中的条目设置为
null
,则需要创建一个
java.lang.Integer
数组

Integer[] numArray = new Integer[N];
由于Java的一个名为“自动装箱”的特性,几乎所有使用原始
int
值的代码都可以使用
Integer

步骤:

  • 使用
    Integer[]
    代替
    int[]
  • 计算所需的大小(计算原始数组中的非
    null
    项)
  • 分配所需大小的新数组
  • 在旧数组上循环,并将每个非空值从它复制到新数组
  • 代码:


    我认为有一个稍微短一点的方法来修剪自己。 剩下的就是找到合适的索引

    你可以做:

    int someIndex = Arrays.asList(arr).indexOf(null);
    arr = Arrays.copyOfRange(arr,0,someIndex);
    
    //输出


    9 4 1

    数组的大小是固定的,因此您可能需要查看其他数据结构,例如arraylist。请检查以下问题:为什么要除以2?我不想除以2。N可以是任意大小,而不仅仅是5。请解释划分。如果主数组的大小为N,并且只填充了其他数字,那么主数组中的非空值的数量将为N/2Ah,我知道了。非常简单的想法,我没有理解。
    Integer[] oldArray = ...;
    
    // Step 2
    int count = 0;
    for (Integer i : oldArray) {
        if (i != null) {
            count++;
        }
    }
    
    // Step 3
    Integer[] newArray = new Integer[count];
    
    // Step 4
    int index = 0;
    for (Integer i : oldArray) {
        if (i != null) {
            newArray[index++] = i;
        }
    }
    
    int someIndex = Arrays.asList(arr).indexOf(null);
    arr = Arrays.copyOfRange(arr,0,someIndex);
    
    import java.util.Arrays;  
    
    public static void main( String[] args )
        {
            int[] nums2 = {9,4,1,8,4};
    
            nums2 =Arrays.copyOf(nums2,3);
    
            for (int i : nums2) {
                System.out.print(i+" ");
            }
    
    
        }