按数组元素对arraylist进行排序

时间:2014-04-13 23:12:00

标签: java arrays sorting arraylist

所以我将数组添加到我的arraylist中,我想让它按数组的第二个元素排序,这是可能的,这是我编写的代码,但没有返回正确的输出,

[5.0, 0.0, 2.0]
[1.0, 2.0, 0.0]
[2.0, 5.0, 0.0]
[3.0, 3.0, 0.0]
[0.0, 8.0, 2.0]

  public void add(double[] k){

    if(a.size()==0){
        a.add(k);

    }
    else if(k[1]<=a.get(0)[1]){
        a.add(0,k);

    }
    else if(k[1]>a.get(0)[1]) {
        int i =0;
        while(a.get(i)[1]<k[1] && i<a.size()-1){
            i++;
        }
        a.add(i+1,k);
    }
    length++;
}

public  void apr(){

    for(int i=0; i<a.size(); i++)
        System.out.println(Arrays.toString(a.get(i)));
    }   

public static void main(String args[]){
    double k[]= {1,2,0};
    double k1[]= {2,5,0};
    double k2[] = {3,3,0};
    double k3[] = {5,0,2};
    double k4[] = {0,8,2};
    Sample amostra1 = new Sample();
            amostra1.add(k);
    amostra1.add(k1);
    amostra1.add(k2);
    amostra1.add(k3);
    amostra1.add(k4);
    amostra1.apr();

第一行输出是不正确的,我希望数组按照第二个组件或第一个组件进行排序,只需对代码进行一点修改即可

2 个答案:

答案 0 :(得分:0)

我会这样做,使用ArrayList的自定义比较器:

Collections.sort(amostra1, new Comparator<double[]>() {

            @Override
            public int compare(double[] o1, double[] o2) {
                int index = 1; // second element of the array
                return Double.compare(o1[index], o2[index]);
            }
        });

要根据数组的第一个元素进行排序,只需将index设置为0,然后根据第一个元素对数组进行排序。

请注意,Collections.sort(...)采用列表比较器

答案 1 :(得分:0)

我最后写了一个&#34;排序&#34;我的添加功能的算法,因为我的样本是一个arraylist,我不能列出一个列表,所以这里是我最终做的,是&#34; a&#34;我的arraylist,后来定义为样本。上述算法存在一些问题,因为它没有考虑插入比列表的最后一个更小的元素,或插入列表的中间。这由第一个组件排序,但是如果你将a.get(i)[0]更改为a.get(i)[1],它会按秒排序,感谢你的帮助;)

public void add(double[] k){

          if(a.size()==0 || a.get(0)[0]>k[0]){
               a.add(0,k);
          }
          else {
              int i=0;
              while(a.get(i)[0]<k[0]&& i<a.size()-1){
                  i++;
          }
             if(i==a.size()-1 && a.get(i)[0]>k[0] ||(i!=a.size()-1 && a.get(i)[0]>k[0]) ){
                 a.add(i,k);
             }
             else if(i==a.size()-1 && a.get(i)[0]<k[0] || (i!=a.size()-1 && a.get(i)[0]<k[0])){
              a.add(i+1,k);
          }

             }
          length++;
             }