2016-08-08 6 views
0

私はここで何が起こっているか理解するのに役立ちます:Arrays.sort(myarray)は物理的に配列を変更しますか?

Main.java:

int[] myarray = new int[125]; 
// setup the array here, code omitted. 

int minimum = ProcessArray.min(myarray); 


// the array values will now print as if they have been sorted... 
for(int I=0; I<myarray.length;i++) { 
    System.out.Println(myarray[i]); 
} 

ProcessArray.java

import java.util.Arrays; 

public class ProcessArray { 
    public static int min(int[] anarray){ 
    Arrays.sort(anarray); 
    return anarray[0]; 
    } 


} 

を配列の最小値を発見した後、アレイがしますソートされた順序で印刷します。

なぜ配列がソート順に並べ替えられますか?

+3

'Arrays.sort'を呼び出した後に配列がソートされる理由を知りたいのですが? – npinti

+0

ちなみに最小値の線形検索はソートよりも効率的です –

答えて

1

あなたが関数に配列を渡すとき、それはmyarrayへの参照でないクローン/コピー

それがコール

後にソートされるように、あなたの最低限の機能は、配列をソートしますが、配列のクローンを作成することができます手動では

int minimum = ProcessArray.min(myarray.clone()); またはクローン/コピーがあれば、「浅いコピー」であることを心に留めておくArrays.copyOf(..)

を使用し、元の配列を続けるだろうそれは、オブジェクトがまだ

が昇順に配列の要素をソートしますこの質問のjavadocは、Arrays.sort方法1として Is Java "pass-by-reference" or "pass-by-value"?

+0

こんにちはDerte、あなたの答えは\コメントありがとうございます。私が長い間忘れていた用語を参照している箇所(参考文献を渡す、値渡す) –

+0

私は、ProcessArrayクラスがインスタンス化されていないという事実と関連があるかもしれないと考えていました。私のパートナーが譲渡を手助けしていて、彼女が与えたアドバイスは、クラスをインスタンス化する必要がないということでした。私はそれが悪いアドバイスだったかもしれないと思った –

+0

いいえ、クラスをインスタンス化するかどうかは関係ありませんが、配列はまだ参照として渡されます。この場合、静的関数を持つことはmin関数が使用しないか変更するそれが定義されているクラスの状態 –

1

を見てみましょう...同じになり、いくつかのオブジェクトの配列でした。文句を言わないあなたの配列を並べ替える使用コレクションによって

あなたの配列が並べ替えるべきではないことを期待し、また、あなたの配列あなたは以下のように使用することができますでの最小値と最大値を見つける必要がある場合は、

Integer[] a = {3,5,1,2,4}; 

for (int i = 0; i < a.length; i++) 
{ 
    System.out.println(a[i]); 
} 

System.out.println("max :"+Collections.max(Arrays.asList(a))); 
System.out.println("min :"+Collections.min(Arrays.asList(a))); 

System.out.println("after find min and max array :"+ Arrays.asList(a)); 

関連する問題