構造体をソートする感じのプログラム(Java)
JAVAをいじったときにできた副産物を晒してみる
要するに配列オブジェクトをソートするプログラムならしいが,ここにたどり着くまで苦労した.
これはC言語でいうところのNameという構造体(Mallocしてどんどんデータを追加していけるデータ構造)を,ソートするプログラム.
import java.util.ArrayList; import java.util.Arrays; public class struct_sort { static ArrayList list =new ArrayList(); public static void main (String[] args) { list.add(new Name("aaa",7));//Cで言えばMalloc list.add(new Name("bbb",2)); list.add(new Name("ccc",3)); list.add(new Name("ddd",4)); list.add(new Name("kkk",9)); ((Name) list.get(0)).get(); ((Name) list.get(1)).get(); ((Name) list.get(2)).get(); ((Name) list.get(3)).get(); ((Name) list.get(4)).get(); Object[] oa=list.toArray();//ここで配列に変換 Arrays.sort(oa,new DataComparator());//配列をソートする System.out.println(); for(int i=0;i<oa.length;i++){ ((Name)oa[i]).get(); } } } class DataComparator implements java.util.Comparator{ public int compare(Object o1,Object o2){ return ((Name)o2).size() - ((Name)o1).size(); } } class Name{//Nameという構造体みたいなもの(だからクラスだってw) String name; int tel; public Name(String a,int b){ name=a; tel=b; } public void get(){ System.out.println(name + " :: " + tel); } public int size(){ return tel; } }
ここで何故最初から配列で作らないのか?と言われれば,リストならば後付でどんどん要素を足していけるからである.
結果はこんな感じ,ってそのままだな.
aaa :: 7 bbb :: 2 ccc :: 3 ddd :: 4 kkk :: 9 kkk :: 9 aaa :: 7 ddd :: 4 ccc :: 3 bbb :: 2