配列内の最上位アルゴリズム

1030 ワード

「javaプログラムの改善151提案」から
1.配列の最大値を求める
 
(1)自己実現、最大値の迅速な検索

public static int max(int[] data){
	int max=data[0];
	for(int i:data){
		max=max>i?max:i;
	}
	return max;
}

 
(2)並べ替えてから値をとる
public static int max(int[] data){
	Arrays.sort(data.clone());
	return data[data.length-1];
}

第2の方法ではなぜdataを先に行うのか.clone()再ソート?配列もオブジェクトなので、コピーしないと元の配列の順番は変えられません.
方法1は性能を向上させることができて、先に並べ替えてから値を取るのは簡単で分かりやすいです.効率的に言えば,方法は少し速い.しかし、実際のテストでは、配列のデータが1万未満であれば、両者にはほとんど差がないことが分かった.
2.1つの配列の中の第2の大きい値を求めます
配列内の値は繰り返し可能であるため、最大値は複数ある可能性があるため、最後から2番目の値を取ることはできません.特殊なアルゴリズムで重複する値を除去してからソートする必要があります
public static int secondMax(Integer[] data){
	List<Integer> dataList=Arrays.asList(data);
	// treeset       
	TreeSet<Integer> ts=new TreeSet<Integer>(dataList);
	//        ,      
	return ts.lower(ts.last());
}