【问题标题】:Merging arrays in java [closed]在java中合并数组[关闭]
【发布时间】:2014-03-31 17:08:49
【问题描述】:

假设你有三个字符串数组 例如:

array1: as,hi,ji

array2: fo,gl

array3: gt,my,wx,zq

如您所见,各个数组已排序。 你将如何合并它们,合并后的数组也被排序? 我知道您可以先编写一个方法来合并一对,然后将最后一个与这个新的合并。 大多数情况下,如果您应该先合并然后排序,我只是感到困惑,反之亦然。 合并排序有用吗?

【问题讨论】:

  • 合并排序非常有用。它易于实施、易于理解且非常有效。见en.wikipedia.org/wiki/…
  • 如果它们已经排好序了,你可以使用“Merge”来创建最终的数组,即取出三个三个数组中最左边的一项并将其移动到输出数组中
  • Merge Sort Java的可能重复
  • @Jean-RémyRevy:我不明白这是怎么重复的(不再)。该链接描述了合并 sort,但没有描述如何将两个数组显式合并在一起。你可以绝对做一个没有另一个。
  • 请停止编辑您的问题,这对您没有帮助。

标签: java arrays merge


【解决方案1】:

我会使用类似的东西

public static String[] join(String[]... sas) {
    String[] result = new String[0];
    for (String[] sa : sas) {
        result = Arrays.copyOf(result, result.length + sa.length);
        System.arraycopy(sa, 0, result, result.length - sa.length, sa.length);
    }
    return result;
}

然后

String[] s = join(s1, s2, s3);
Arrays.sort(s);

也许有任何外部库处理这个。

与效率相关,对数组进行排序有复杂度~N * log N(合并排序)比复制(~N)差,所以更好的方法是将数组合并并排序一次,而不是对每个特定的合并进行排序。 Java 类 Arrays 在内部使用合并排序。

【讨论】:

    【解决方案2】:

    这是一个总体思路,尽管 3 个 String 数组已经排序,但我添加了 Arrays.sort() 以防您使用的数组未排序

    String[] a1 = {"as", "hi", "ji"};
    String[] a2 = {"fo", "gl"};
    String[] a3 = {"gt", "my", "wx", "zq"};
    
    List<String> list1 = new ArrayList<String>(Arrays.asList(a1));
    list1.addAll(Arrays.asList(a2));
    list1.addAll(Arrays.asList(a3));
    String[] all = list1.toArray(new String[list1.size()]);
    Arrays.sort(all);
    
    for(String a : all) {
       System.out.println(a);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 2013-10-14
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2022-10-16
      • 1970-01-01
      相关资源
      最近更新 更多