Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序多个数组_Java_Arrays_String_Sorting - Fatal编程技术网

Java 排序多个数组

Java 排序多个数组,java,arrays,string,sorting,Java,Arrays,String,Sorting,我有3个数组,其中一个是字符串数组,2个是int数组 现在,当我对一个进行排序时,我必须对它们进行排序 例如: String[] stringarr = {"a", "z", "b"}; int[] intarra = {5, 8, 2}; int[] intarrb = {0, 7, 1}; 我想要的是按intarra对它们进行排序 我可以用 Arrays.sort(intarra); 返回 intarra == {2, 5, 8}; 但是我如何对其他数组进行排序,以便 stringar

我有3个数组,其中一个是字符串数组,2个是int数组

现在,当我对一个进行排序时,我必须对它们进行排序

例如:

String[] stringarr = {"a", "z", "b"};
int[] intarra = {5, 8, 2};
int[] intarrb = {0, 7, 1};
我想要的是按intarra对它们进行排序

我可以用

Arrays.sort(intarra);
返回

intarra == {2, 5, 8};
但是我如何对其他数组进行排序,以便

stringarr == {"b", "a", "z"};
intarrb == {1, 0, 7};
或者我应该使用其他东西来存储数据


字符串数组是一个事件标题,而int数组是事件的时间。

这很简单-您需要编写一个方法来获取数组(数组列表、数组数组或数组的var arg)并首先对它们进行排序,这将导致其他数组中元素的索引也发生变化。

这很简单-您需要编写一个方法来获取数组(数组列表、数组数组数组或数组的var arg)并首先对它们进行排序,这将导致其他数组中元素的索引也发生变化。

使用OOP很容易做到这一点。创建包含数据的结构并指定排序方法:

public class MyStructure implements Comparable
{
     public String string;
     public int int1;
     public int int2;

     public int compareTo(Object obj)
     {
          if (obj instanceof MyStructure)
          {
              return ((MyStructure) obj.int1) - int1;
          }
          return 0;
     }

}

现在创建这些结构的数组并对该数组进行排序。

使用OOP很容易做到这一点。创建包含数据的结构并指定排序方法:

public class MyStructure implements Comparable
{
     public String string;
     public int int1;
     public int int2;

     public int compareTo(Object obj)
     {
          if (obj instanceof MyStructure)
          {
              return ((MyStructure) obj.int1) - int1;
          }
          return 0;
     }

}

现在创建这些结构的数组并对该数组进行排序。

Java推荐的方法不是维护3个单独的数组,而是创建一个对象列表,并使用
Collections.sort()
对对象进行排序(不确定您的用例是否可以这样做)。因此,所有属性将始终保持同步。您的对象应该实现
Comparable
接口,因此您将被迫重写
compareTo()
方法

public class MySortable implements Comparable {
   private String strVal;
   private int intVala;
   private int intValb;

   public int compareTo(MySortable other) {
      // Use Integer's compareTo method instead of writing your own logic
      return Integer.valueof(intVala).compareTo(Integer.valueOf(other.intVala));
   }
}

Java推荐的方法不是维护3个单独的数组,而是创建一个对象列表,并使用
Collections.sort()
对对象进行排序(不确定您的用例是否可以这样做)。因此,所有属性将始终保持同步。您的对象应该实现
Comparable
接口,因此您将被迫重写
compareTo()
方法

public class MySortable implements Comparable {
   private String strVal;
   private int intVala;
   private int intValb;

   public int compareTo(MySortable other) {
      // Use Integer's compareTo method instead of writing your own logic
      return Integer.valueof(intVala).compareTo(Integer.valueOf(other.intVala));
   }
}

创建一个类来封装您提到的三个领域

class MyClass{
String input:
int a;
int b;
}
然后,根据您是否希望对字符串或整数进行排序,创建一个适当的比较器,该比较器将对该字段进行比较,并给出排序后的数组

ArrayList<MyClass> a;
Collections.sort(a, new Comparator<MyClass> {
int compareTo(MyClass a, MyClass b){
a.getInt1()-b.getInt2();
}
arraylista;
Collections.sort(一种新的比较器){
int比较(我的a类、b类){
a、 getInt1()-b.getInt2();
}

使用Comparator的好处是,根据您的用例,您可以对stings和Integer进行排序。

创建一个类来封装您提到的三个领域

class MyClass{
String input:
int a;
int b;
}
然后,根据您是否希望对字符串或整数进行排序,创建一个适当的比较器,该比较器将对该字段进行比较,并给出排序后的数组

ArrayList<MyClass> a;
Collections.sort(a, new Comparator<MyClass> {
int compareTo(MyClass a, MyClass b){
a.getInt1()-b.getInt2();
}
arraylista;
Collections.sort(一种新的比较器){
int比较(我的a类、b类){
a、 getInt1()-b.getInt2();
}
使用Comparator的好处是,根据您的用例,您可以对Sting和整数进行排序。

Jixi问道:“或者我应该使用其他东西来存储数据?”

是的,您应该这样做。我建议您创建一个新类来存储所有三个内容:

public class TimedEvent implements Comparable<TimedEvent> {
    String title;
    int time1, time2;

    public TimedEvent(String name, int t1, int t2) {
        title = name;
        time1= t1;
        time2=t2;
    }

    public int compareTo(TimedEvent otherEvent) {
        return title.compareTo(otherEvent.title);
    }
}
请注意,您未初始化的数组中的任何元素都将为
null
,这将在您尝试排序时引发异常。因此,请确保数组的长度正是您所需的长度。如果您不知道要预先存储多少个事件,请改用ArrayList:

ArrayList<TimedEvent> eventList = new ArrayList<>(); //java7 syntax. use                         
                                 // new ArrayList<TimedEvent>(); if using Java 6.
// lots of events get stored.
eventList.add(new TimeEvent("Start", 125,134));
eventList.add(new TimeEvent("FireClose", 128,139));
eventList.add(new TimeEvent("Important Action", 1328,1339));

Collections.sort(eventList);
ArrayList eventList=new ArrayList();//java7语法。使用
//新建ArrayList();如果使用Java 6。
//存储了很多事件。
添加(新的时间事件(“开始”,125134));
添加(新的时间事件(“FireClose”,128139));
添加(新时间事件(“重要行动”,13281339));
Collections.sort(事件列表);
鸡西问:“还是我应该用别的东西来存储数据?”

是的,您应该这样做。我建议您创建一个新类来存储所有三个内容:

public class TimedEvent implements Comparable<TimedEvent> {
    String title;
    int time1, time2;

    public TimedEvent(String name, int t1, int t2) {
        title = name;
        time1= t1;
        time2=t2;
    }

    public int compareTo(TimedEvent otherEvent) {
        return title.compareTo(otherEvent.title);
    }
}
请注意,您未初始化的数组中的任何元素都将为
null
,这将在您尝试排序时引发异常。因此,请确保数组的长度正是您所需的长度。如果您不知道要预先存储多少个事件,请改用ArrayList:

ArrayList<TimedEvent> eventList = new ArrayList<>(); //java7 syntax. use                         
                                 // new ArrayList<TimedEvent>(); if using Java 6.
// lots of events get stored.
eventList.add(new TimeEvent("Start", 125,134));
eventList.add(new TimeEvent("FireClose", 128,139));
eventList.add(new TimeEvent("Important Action", 1328,1339));

Collections.sort(eventList);
ArrayList eventList=new ArrayList();//java7语法。使用
//新建ArrayList();如果使用Java 6。
//存储了很多事件。
添加(新的时间事件(“开始”,125134));
添加(新的时间事件(“FireClose”,128139));
添加(新时间事件(“重要行动”,13281339));
Collections.sort(事件列表);

您确实应该更改存储数据的方式。为什么不创建一个具有3个属性的MyEvent类,并将MyEvent对象存储在一个数组中?然后,您可以通过实现一个基本的自定义比较器对该数组进行排序。您确实应该更改存储数据的方式。为什么不创建一个具有3个属性的MyEvent类,并存储数据ur MyEvent对象在单个数组中?然后,您可以通过实现一个基本的自定义比较器对该数组进行排序。如果他想对int字段进行排序,该怎么办?我的意思是说,使用Comparable,他只能对该特定字段进行排序。但在当前的用例中,他可能想对这三个字段中的任何一个进行排序。只需添加进一步的检查,int1LUE是相等的。如果他想在int字段上排序,该怎么办?我的意思是说,使用Comparable,他只能在该特定字段上排序。但在当前的用例中,他可能想在这三个字段中的任何一个字段上排序。只需添加进一步的检查,看看int1值是否相等。我正在尝试使其工作,但如何将我的事件设置为eventarray?我使用了TimedEvet.title=eventtitle等,但我得到的只是空值。请看我的更新答案。您需要在创建对象和设置字段之前创建该对象。因此,请使用我编写的构造函数,或者