トッカンソフトウェア

Java ソート


今回はソートをやります。


ソートを自分で実装

ソートの方法を自分で実装します。
				
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Sort {

	private String str;

	public Sort(String s) {
		this.str = s;
	}

	public String getStr() {
		return str;
	}

	public static void main(String[] args) {
		List<Sort> ary = new ArrayList<>();
		ary.add(new Sort("1"));
		ary.add(new Sort(null));
		ary.add(new Sort("a"));
		ary.add(new Sort("0"));

		Collections.sort(ary, new Comparator<Sort>() {
			@Override
			public int compare(Sort aa, Sort bb) {
				String a = aa.getStr();
				String b = bb.getStr();

				if (a == null && b == null)
					return 0;
				else if (a == null)
					return -1;
				else if (b == null)
					return 1;
				else
					return a.compareTo(b);
			}
		});

		for (Sort st : ary) {
			System.out.println(st.getStr());
		}
	}
}


			
実行イメージ
				
 null
 0
 1
 a

			

通常のソート(NULLもソートされる)

自然な順番でソートします。NULLもソートしてくれます。
				
package test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Sort {

	public static void main(String[] args) {
		List<String> ary = new ArrayList<>();
		ary.add("1");
		ary.add(null);
		ary.add("a");
		ary.add("0");

		System.out.println("***ソート1***");
		ary.sort(Comparator.nullsFirst(Comparator.naturalOrder()));
		for (String st : ary) {
			System.out.println(st);
		}

		System.out.println("***ソート2***");
		ary.sort(Comparator.nullsLast(Comparator.reverseOrder()));
		for (String st : ary) {
			System.out.println(st);
		}
	}
}


			
実行イメージ
				
 ***ソート1***
 null
 0
 1
 a
 ***ソート2***
 a
 1
 0
 null

			

通常のソート(NULLがあったらException)

自然な順番でソートします。NULLをソートしようとした場合、Exceptionが発生します。
				
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sort {

	public static void main(String[] args) {
		List<String> ary = new ArrayList<>();
		ary.add("1");
		ary.add("a");
		ary.add("0");

		System.out.println("***ソート1***");
		Collections.sort(ary);
		for (String st : ary) {
			System.out.println(st);
		}

		System.out.println("***ソート2***");
		Collections.reverse(ary);
		for (String st : ary) {
			System.out.println(st);
		}
	}
}

			
実行イメージ
				
 ***ソート1***
 0
 1
 a
 ***ソート2***
 a
 1
 0


			


ページのトップへ戻る