当前位置: 代码迷 >> J2SE >> 两个数组怎么高速合并
  详细解决方案

两个数组怎么高速合并

热度:115   发布时间:2016-04-24 12:26:13.0
两个数组如何高速合并?
我有两个数组
Java code
         int[][] a={{2,3},{11,2},{7,4},{9,3}};        int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};


要求a和b数组合并 结果变为
Java code
int[][] c={{2,5},{3,4},{6,3},{7,4},{9,4},{11,3}};


不能用两个for嵌套 意思就是性能要比两个for嵌套要高

------解决方案--------------------
Java code
    int[][] a={{2,3},{11,2},{7,4},{9,3}};    int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};    Map<Integer, Integer> map = new HashMap<Integer, Integer>();    for (int[] x : a) {      map.put(x[0], x[1]);    }    for (int[] x : b) {      Integer y = map.get(x[0]);      if (y != null) {        map.put(x[0], y+x[1]);      } else {        map.put(x[0], x[1]);      }    }    int[][] result = new int[map.size()][2];    Set<Integer> keys = map.keySet();     // Integer可能不需要,不过稳妥一点,还是直接,保证顺序    // Set<Integer> keys = new TreeSet<Integer>(map.keySet());    int count = 0;    for (Integer key:keys) {      result[count][0] = key;      result[count++][1] = map.get(key);    }
------解决方案--------------------
如果,a[i][0]和b[i][0]的范围已知,而且a[i][1]和b[i][1]都是正数的话,可以更简化
Java code
    int[][] a={{2,3},{11,2},{7,4},{9,3}};    int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};    int[] c = new int[20/*key的范围,可能考虑负数什么*/];    for (int[] x:a) {      c[x[0]] += x[1];    }    for (int[] x:b) {      c[x[0]] += x[1];    }    int count = 0;    int[][] temp = new int[c.length][2];    for (int i = 0; i < c.length; i++) {      if (c[i] > 0) {        temp[count][0] = i;        temp[count++][1] = c[i];      }    }    int[][] result = new int[count][2];    System.arraycopy(temp, 0, result, 0, count);
------解决方案--------------------
探讨

引用:

map我大致看了一下实现 get方法和contain方法之类的还是for嵌套的 而且不是都说数组是性能最好的么

建议你再看十遍

------解决方案--------------------
探讨

如果,a[i][0]和b[i][0]的范围已知,而且a[i][1]和b[i][1]都是正数的话,可以更简化
Java code
int[][] a={{2,3},{11,2},{7,4},{9,3}};
int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};
int[] c = new int[20/*key的范围,可能考虑负数什么*/……

------解决方案--------------------
探讨

如果,a[i][0]和b[i][0]的范围已知,而且a[i][1]和b[i][1]都是正数的话,可以更简化
Java code
int[][] a={{2,3},{11,2},{7,4},{9,3}};
int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};
int[] c = new int[20/*key的范围,可能考虑负数什么*/……
  相关解决方案