当前位置:  开发笔记 > 编程语言 > 正文

在Java中对匹配的数组进行排序

如何解决《在Java中对匹配的数组进行排序》经验,为你挑选了2个好方法。

假设我有两个数组(在Java中),

int []数字; 和int []颜色;

数字的每个第i个元素对应于颜色中的第i个元素.例如,数字= {4,2,1}颜色= {0x11,0x24,0x01}; 意味着数字4是颜色0x11,数字2是0x24等.

我想对数字数组进行排序,但是仍然有它,所以每个元素都与颜色对匹配.

防爆.数字= {1,2,4}; colors = {0x01,0x24,0x11};

什么是最干净,最简单的方法?阵列有几千个项目,因此到位是最好的,但不是必需的.做一个Arrays.sort()和自定义比较器是否有意义?最好使用库函数.

注意:我知道"最佳"解决方案是为两个元素创建一个类并使用自定义比较器.这个问题的目的是要求人们以最快的方式对此进行编码.想象一下,参加一个编程竞赛,你不会想要制作所有这些额外的类,比较器的匿名类等.更好的是,忘记Java; 你会如何在C中编码?



1> tovare..:

如果保留带索引的第三个数组,则可以将sort()与自定义比较器一起使用,并对其进行排序,保持数据不变.

Java代码示例:

Integer[] idx = new Integer[numbers.length];
for( int i = 0 ; i < idx.length; i++ ) idx[i] = i;              
Arrays.sort(idx, new Comparator() {
    public int compare(Integer i1, Integer i2) {                        
        return Double.compare(numbers[i1], numbers[i2]);
    }                   
});

// numbers[idx[i]] is the sorted number at index i
// colors[idx[i]] is the sorted color at index i

请注意,您必须使用Integer而不是int或不能使用自定义比较器.



2> Frank Pape..:

好像做的是创建一个实现可比的自定义属性类最干净的东西.例如:

class Color implements Comparable {
  private int number;
  private int color;

  // (snip ctor, setters, etc.)

  public int getNumber() {
    return number;
  }
  public int getColor() {
    return color;
  }

  public int compareTo(Color other) {
    if (this.getNumber() == other.getNumber) {
      return 0;
    } else if (this.getNumber() > other.getNumber) {
      return 1;
    } else {
      return -1;
    }
  }
}

然后,你可以分开你从排序逻辑排序算法(如果你使用一个列表,而不是一个数组,你可以使用Collections.sort),以及最重要的是,你将不必担心在某种程度上获得两个阵列不同步.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有