【问题标题】:Combine two integer arrays [duplicate]合并两个整数数组[重复]
【发布时间】:2011-06-09 11:53:28
【问题描述】:

有没有办法从两个数组中创建一个数组?例如

int[] array1 = {1,2,3};
int[] array2 = {4,5,6};
int[] array1and2 = array1 + array2;

【问题讨论】:

  • 你想做什么?连接数组还是求和?

标签: java arrays


【解决方案1】:

是的,但这并不那么容易。创建第三个数组,它是两个数组组合的大小,并循环遍历每个原始数组并移动项目。另请查看System.arraycopy()

【讨论】:

    【解决方案2】:

    找到两个数组的总大小,并将 array1and2 设置为添加的两个数组的总大小。然后循环array1然后array2并将值添加到array1and2中。

    【讨论】:

    • 对于这样做的人来说,有任何很好的理由给 -1 加分吗?例如,建议的方法失败了?如果只是在不同的方法上存在分歧,但都产生了相同的结果,那么这不是一个好的理由。
    【解决方案3】:

    注意:没有测试过

    int[] concatArray(int[] a, int[] b) {
      int[] c = new int[a.length + b.length];
      int i = 0;
      for (int x : a) { c[i] = x; i ++; }
      for (int x : b) { c[i] = x; i ++; }
      return c;
    }
    

    【讨论】:

      【解决方案4】:

      您不能直接添加它们,您必须创建一个新数组,然后将每个数组复制到新数组中。 System.arraycopy 是一种可用于执行此复制的方法。

      int[] array1and2 = new int[array1.length + array2.length];
      System.arraycopy(array1, 0, array1and2, 0, array1.length);
      System.arraycopy(array2, 0, array1and2, array1.length, array2.length);
      

      无论 array1 和 array2 的大小如何,这都会起作用。

      【讨论】:

        【解决方案5】:

        我认为您必须分配一个新数组并将值放入新数组中。例如:

        int[] array1and2 = new int[array1.length + array2.length];
        int currentPosition = 0;
        
        for( int i = 0; i < array1.length; i++) {
            array1and2[currentPosition] = array1[i];
            currentPosition++;
        }
        
        for( int j = 0; j < array2.length; j++) {
            array1and2[currentPosition] = array2[j];
            currentPosition++;
        }
        

        据我所知,这段代码应该可以工作。

        【讨论】:

          【解决方案6】:
          int [] newArray = new int[old1.length+old2.length];
          System.arraycopy( old1, 0, newArray, 0, old1.length);
          System.arraycopy( old2, 0, newArray, old1.length, old2.length );
          

          不要使用逐个元素的复制,和System.arraycopy()相比很慢

          【讨论】:

            【解决方案7】:

            任务:给定两个长度相同的 int 数组 array1 和 array2,zip 应该返回一个两倍长的数组,其中 array1 和 array2 的元素是交错的。即结果数组的元素#0是array1[0],元素#1是array2[0],元素#2是array1[1],元素#3是array2[1],以此类推。

            public static int [] zip(int [ ] array1, int [] array2) {
            //make sure both arrays have same length
            if (array1.length != array2.length) {
                throw new IllegalArgumentException("Unequal array lengths - zip not possible");
            }
            
            int [] zippedArray = new int [array1.length+ array2.length]; 
            int idx_1 = 0;
            int idx_2 = 0;
            
            //for each element of first array, add to new array if index of new array is even
            
            for (int i=0; i < zippedArray.length; i+=2){
                zippedArray[i]= array1[idx_1++];
            }
            for (int i=1; i < zippedArray.length; i+=2){
                zippedArray[i]= array2[idx_2++];
            }
            
            //check contents of new array       
            for (int item: zippedArray){
                System.out.print(item + " ");
            }
            
            return zippedArray;
            
            }
            

            【讨论】:

              【解决方案8】:

              这是一个使用可变参数的简单函数:

              final static
              public int[] merge(final int[] ...arrays ) {
                  int size = 0;
                  for ( int[] a: arrays )
                      size += a.length;
              
                      int[] res = new int[size];
              
                      int destPos = 0;
                      for ( int i = 0; i < arrays.length; i++ ) {
                          if ( i > 0 ) destPos += arrays[i-1].length;
                          int length = arrays[i].length;
                          System.arraycopy(arrays[i], 0, res, destPos, length);
                      }
              
                      return res;
              }
              

              使用方法:

              int[] array1 = {1,2,3};
              int[] array2 = {4,5,6};
              int[] array3 = {7,8,9};
              int[] array1and2and3 = merge(array1, array2, array3);
              for ( int x: array1and2and3 ) 
                  System.out.print( String.format("%3d", x) );
              

              【讨论】:

                【解决方案9】:

                使用 ArrayUtils.addAll(T[], T...):

                import org.apache.commons.lang3.ArrayUtils;
                
                AnyObject[] array1 = ...;
                AnyObject[] array2 = ...;
                AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2);
                

                【讨论】:

                • apache.commons.lang3.ArrayUtils 库的任何参考链接?
                猜你喜欢
                • 1970-01-01
                • 2019-02-22
                • 1970-01-01
                • 1970-01-01
                • 2017-03-22
                • 1970-01-01
                • 1970-01-01
                • 2020-02-22
                相关资源
                最近更新 更多