2016-08-18 2 views
-2

ComparatorやComparableを使わずにjavaのオブジェクトのarraylistをソートする方法はありますか?以下に示すようにStudentクラスがあります。それらの年齢に基づいてStudentsオブジェクトをソートする必要があります。 ComparableComparatorインターフェース - ArrayListは、このような場合のその後、カスタムオブジェクト型である場合、クラスComparatorを使用せずにjavaのオブジェクトのarraylistをソートする方法はありますか?

//Class of Students 
//comparable or comparator Not implemented 

public class Student { 
     private String studentname; 
     private int rollno; 
     private int studentage; 

     public Student(int rollno, String studentname, int studentage) { 
      this.rollno = rollno; 
      this.studentname = studentname; 
      this.studentage = studentage; 
     } 

     public String getStudentname() { 
      return studentname; 
     } 
     public void setStudentname(String studentname) { 
     this.studentname = studentname; 
     } 
     public int getRollno() { 
     return rollno; 
     } 
     public void setRollno(int rollno) { 
     this.rollno = rollno; 
     } 
     public int getStudentage() { 
     return studentage; 
     } 
     public void setStudentage(int studentage) { 
     this.studentage = studentage; 
     } 
    } 


    import java.util.*; 
    public class ArrayListSorting { 

     public static void main(String args[]){ 

     //Array of Student Objects 
      ArrayList<Student> arraylist = new ArrayList<Student>(); 
      arraylist.add(new Student(223, "Chaitanya", 26)); 
      arraylist.add(new Student(245, "Rahul", 24)); 
      arraylist.add(new Student(209, "Ajeet", 32)); 

      Collections.sort(arraylist); 

      for(Student str: arraylist){ 
       System.out.println(str.getStudentage()); 
      } 
     } 
    } 
+0

あなたはラムダ関数を使用できますか?これはコンパイラを使用していますが、多くのコードを書くことはありません。 コンパイラを使用したくない具体的な理由はありますか? – zstring

+0

自分でalgoをプログラミングすることを除いて、それは不可能です –

+0

'System.out.println(str);' 'println()'関数が 'java.lang.Object'型の引数を取ることは知らなかった。 – progyammer

答えて

0

んで実装するコンパレータまたは比較を使用せずに、あなたは、ソートするための2つのオプションがあります。

あなたが 単純な配列リストをソートする Collections.sort()メソッドを使用することができますしかし

+1

**または自分でソートを実装していますが、これはすべての目的であるようです。 – Fildor

+0

確かめていただきありがとうございます。 – DimaSan

2

これの最も厳しい解釈から来ているとすれば、答えはまだあり、は常に、はいです。

並べ替えアルゴリズムは、実装されている言語に関係なくデータを並べ替えます。そのため、あなたの演習のポイントはソートアルゴリズムを実装することです。合理的だと思う。

ソートアルゴリズムは提供しません。しかし、どのようにしたいかによって、(Javaのように)ユーティリティクラスを用意し、ArrayListを受け取り、algoをソートすることでソートすることができます。あなたは明らかに学生の年齢に基づいてこれを行うでしょう。

Lists.sort(yourArrayList);:他のものと同じくらい良いでしょう。

-2

はいその

yourArray.sort(); 

と呼ばれるあなたは新しいもの(古い1イマイチ種類のデータつつ、一種のみNEWARRAYをしたい場合)を使用してにあなたの配列をコピーする必要があります。

System.arraycopy(yourArray, startIndex, newArray,); 

または使用することができます

int[]newArray = Arrays.copyOf(yourArray, arrayLength); 

私の意見では、あなたがArr ays。

+0

これは 'ArrayList'です。 – ChiefTwoPencils

+0

ごめんなさい: – MOC

+0

System.arraycopy(yourArray、startIndex、newArray、endIndex); – MOC

0

質問に対する回答はありです。方法は次のとおりです。Selection Sort技術を使用して、配列の場合と同じようにArrayListを繰り返し処理できます。

for(int i=0;i<arraylist.size()-1;i++){ 
    int m = i; 
    for(int j=i+1;j<arraylist.size();j++){ 
     if(araylist.get(m).studentage > arraylist.get(j).studentage) 
      m = j; 
    } 
    //swapping elements at position i and m 
    Student temp = arraylist.get(i); 
    arraylist.set(i, arraylist.get(m)); 
    arraylist.set(m, temp); 
} 

これは、年齢の昇順にスチューデントオブジェクトをソートします。

+0

"私は生徒のオブジェクトを**年齢に基づいて並べ替える必要があります**" :)しかし、私はOPの練習のために変更を残すことができると思います。 – Fildor

+0

一瞬待って。上記のプログラムでは、「ロールノ」を「学生」に変更できます。私はまだ編集を行いました。 – progyammer

0

あなたは、言ったが、あなたの質問への答え

「をクラスにコンパレータまたは同等の実装使用せずに?ソートすることが可能だ」、そして、はいです。カスタムコンパレータを実装し、これをsort overloadに渡すことができます。あなたはまだComparatorを実装していますが、ソートしているアイテムのクラスのメンバーではありません。

例としてUsing comparator to make custom sortを参照してください。

0

はい、それは代わりにComparableComparatorget()set()方法を使用してArrayListを並べ替えることが可能である:

public class ArrayListSortWithoutComparator { 

    public static void main(String[] args) { 
     ArrayList <Integer> arraylist = new ArrayList <Integer>(); 

     arraylist.add(10); 
     arraylist.add(5); 
     arraylist.add(4); 
     arraylist.add(2); 

     for (int i = 0; i < arraylist.size(); i++) { 
      for (int j = arraylist.size() - 1; j > i; j--) { 
       if (arraylist.get(i) > arraylist.get(j)) { 
        int tmp = arraylist.get(i); 
        arraylist.set(i,arraylist.get(j)); 
        arraylist.set(j,tmp); 
       } 
      } 
     } 
     for (int i : arraylist) { 
      System.out.println(i); 
     } 
    } 
} 

出力:

2 
4 
5 
10 
+0

これはバブルソートです。あなたはあなたの答えにこれを言えますか? –

+0

私はあなたに同意します、私のソリューションはバブルソートです –

関連する問題