当前位置: 首页 > 知识库问答 >
问题:

Java多数组排序

曹原
2023-03-14

嗨,我目前有4个数组都持有不同的数据,我遇到的问题是我想按字母顺序对其中一个数组进行排序,通常我会这样做

class IgnoreCaseComparator implements Comparator<String> {
   public int compare(String strA, String strB) {
      return strA.compareToIgnoreCase(strB);
   }
}
IgnoreCaseComparator icc = new IgnoreCaseComparator();
java.util.Collections.sort(ARRAY,icc);

其中数组将是我想按字母顺序排序的数组,但我需要数组一起排序。

比如说我的数组是这样的

Pet Array: [Dog, Cat, Bird]
Owner Array: [Jim, Kyle, Joe]
Friend Array: [Jake, Jim, John]
Cat Array: [false, true, false]

我想根据Pet数组进行排序,我的输出应该是这样的,所有的第三个值现在都是第一个,第一个值现在是第三个(这比简化了很多,我的实际数组包含数千个输入)

Pet Array: [Bird, Cat, Dog]
Owner Array: [Joe, Kyle, Jim]
Friend Array: [John, Jim, Jake]
Cat Array: [false, true, false]

有没有一种简单的方法可以做到这一点,我可以对一个数组进行排序并让其他数组跟随。谢谢您对这个问题的任何帮助。

==编辑===

除了我的解决方案略有不同,因为我读了一点,检查过的答案是完美的,我在compareTo方法中只有一个略有不同的返回行

    class Entity implements Comparable<Entity> {
        String Pet;
        String Owner;
        String Friend;
        int Cat;

        Entity(String Pet, String Owner, String Friend, int Cat) {
          this.Pet = Pet;
          this.Owner = Owner;
          this.Friend = Friend;
          this.Cat = Cat;
        }

        @Override
        public int compareTo(Entity other) {
            return this.Pet.compareToIgnoreCase(other.Pet);
        }
     }

共有3个答案

公孙霖
2023-03-14

为什么不制作一个包含对象的数组,其中包含Pet、Owner、Friend和Cat字段,并让比较器按所需字段排序呢。

class PetContainer { // Find a better name
    public String Pet, Owner, Friend;
    public bool Cat;
}

然后把它们放在一个数组

class IgnoreCaseComparator implements Comparator<PetContainer> {
    public int compare(PetContaier PA, PetContainer PB) {
        return PA.Pet.compareToIgnoreCase(PB.Pet);
    }
}

这只是一个草图。创建一个get方法,而不是通过字段访问它们,并为字段创建一些合适的名称。

希望有帮助。

郭云
2023-03-14
  1. 您可以创建一个类Tuple,用于字段:pet所有者朋友cat-每个都有相关的类型。
  2. 使此类实现可比较,这基本上只是根据相关字段进行比较。[或者,或者-为此类实现匹配的比较器]。
  3. 创建元组[]组合数组[或列表

墨翔宇
2023-03-14

您可以声明一个对象:

class Entity implements Comparable<Entity> {
    Pet pet;
    Person owner;
    Friend friend;
    boolean cat;

    Entity(Pet pet, Person owner, Friend friend, boolean cat) {
      this.pet = pet;
      this.owner = owner;
      this.friend = friend;
      this.cat = cat;
    }

    public int compareTo(Entity b) {
      return pet.getName().compareToIgnoreCase(b.pet.getName());
    }
 }

然后构建一个数组或这些对象的列表。和排序

Entity[] array = new Entity[pets.length];
for (int i = 0; i < pets.length) {
    array[i] = new Entity(pets[i], owners[i], friends[i], cats[i]);
}
Arrays.sort(array);

之后,可以将其拆分回阵列。

for (int i = 0; i < pets.length) {
    pets[i] = array[i].pet;
    owners[i] = array[i].owner;
    ...
}
 类似资料:
  • 主要内容:升序,降序我们在学习 Java 的过程中肯定会遇到对数组进行升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序。Java 语言使用 Arrays 类提供的 sort() 方法来对数组进行排序。 升序 使用 java.util.Arrays 类中的 sort() 方法对数组进行升序分为以下两步: 导入 java.util.Arrays 包。 使用 Arrays.sort(数组名) 语法对数

  • 我在Java中有一个数组,其中包含一组随机日期: {2015年1月20日、2015年2月12日、2015年2月20日、2015年6月21日、2015年7月12日、2015年7月28日、2015年7月30日、2015年9月24日、2015年12月31日} 如何按月将此阵列拆分为多个阵列? 我想要 {2015年1月20日}、{2015年2月12日、2015年2月20日}、{2015年6月21日}、{2

  • 问题内容: 所以我正在制作一个需要处理多个数组的程序。有没有办法对所有这些数组进行排序以反映一个数组的排序?这些值在所有三个数组中都位于相同的索引位置,需要在排序后保持相同的索引值 例: 我有三个数组: 有什么方法可以对距离数组进行排序,然后将该排序反映给其他数组。因此,如果按名称排序并且Jane变为0,则其他数组中相同位置的其他值也将移至0。我该怎么办? 问题答案: 更好/面向对象的方法可能是让

  • 问题内容: 请原谅我这是多余的还是超基本的。我要从R进入Python / Numpy,并且很难在脑海里翻转事物。 我有一个维数组,我想使用索引值的另一个n维数组进行排序。我知道我可以将其包装成一个循环,但是似乎应该有一种非常简洁的Numpyonic方式将其击败并提交。这是设置n = 2的问题的示例代码: 所以现在我有一个2 x 5的随机数数组和2 x 5的索引。我已经阅读了约10次帮助,但显然我的

  • 问题内容: 我想排序一个,但问题是我的母语字符-我的字母是这样的:。如您所见,字符从头到尾排在第二位,在字母上排第二位,因此在对数组进行排序后,它的排序不正确。我所有的母语字符都移到了数组的末尾。例: 输出: 应该: 问题答案: 您应该使用Collat​​or类。 例如 然后使用此整理器对集合进行排序

  • 问题内容: 有没有什么简便的方法可以按降序对数组进行排序,就像它们在Arrays类中如何按升序排序? 问题答案: 你可以使用它对所有对象进行排序 不能直接用于降序对原始数组进行排序。如果尝试Arrays.sort()通过传递由定义的反向 来调用该方法,则会抛出错误 找不到适合sort(int [],comparator)的方法 可以与“对象数组”(例如整数数组)一起使用,但不能与基本数组(例如整数