配列内の最上位アルゴリズム
1030 ワード
「javaプログラムの改善151提案」から
1.配列の最大値を求める
(1)自己実現、最大値の迅速な検索
(2)並べ替えてから値をとる
第2の方法ではなぜdataを先に行うのか.clone()再ソート?配列もオブジェクトなので、コピーしないと元の配列の順番は変えられません.
方法1は性能を向上させることができて、先に並べ替えてから値を取るのは簡単で分かりやすいです.効率的に言えば,方法は少し速い.しかし、実際のテストでは、配列のデータが1万未満であれば、両者にはほとんど差がないことが分かった.
2.1つの配列の中の第2の大きい値を求めます
配列内の値は繰り返し可能であるため、最大値は複数ある可能性があるため、最後から2番目の値を取ることはできません.特殊なアルゴリズムで重複する値を除去してからソートする必要があります
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());
}