오늘도 삽질중

android ArrayList Collections.shuffle 시 주의해야 할 점 (비교값 중복) 본문

안드로이드

android ArrayList Collections.shuffle 시 주의해야 할 점 (비교값 중복)

Choi3950 2019. 3. 17. 03:52
반응형

android 에서 개발을 하다보면 랜덤하게 값을 섞는경우가 있습니다.


ArrayList에서 값을 다시 랜덤하게 배치하고 싶을때는 Collections.Shuffle를 사용하게 되는데요.


보통 기존의 값과 재배열한 값을 비교하는 로직을 구현할 때 많이 사용하게 됩니다.


이런상황에서 조심해야할 점을 알려드리고자 합니다.


public class MainActivity extends AppCompatActivity {


private ArrayList < String > array_1;
private ArrayList < String > array_2;


@Override
protected void onCreate ( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );

String[] str_arrary = {"안녕하세요" , "안드로이드" , "1" , "Java" , "액티비티" , "스레드" , "Test"};


array_1 = new ArrayList<>( );
array_2 = new ArrayList<>( );


/**
* String 배열 ArrayList 변환
*/
array_1.addAll( Arrays.asList( str_arrary ) );

/**
* 그 값을 array_2 에 대입
*/

array_2 = array_1;

/**
* Collections 진행
*/

Collections.shuffle( array_1 );

Log.e( " array_1 : " , "" + array_1);
Log.e( " array_2 : " , "" + array_2);


}
}



String 배열을 ArrayList로 변환후에 Collections.shuffle() 를 진행했습니다.


이 코드를 실행하면 결과는 다음과 같이 나오게 됩니다.




분명히 array_1 만 shuffle 를 진행했는데 , array_2 까지 값이 변경되었습니다.



값이 서로 다르게 나오려면 아래처럼 작업을 하시면 됩니다.


public class MainActivity extends AppCompatActivity {


private ArrayList < String > array_1;
private ArrayList < String > array_2;


@Override
protected void onCreate ( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );

String[] str_arrary = {"안녕하세요" , "안드로이드" , "1" , "Java" , "액티비티" , "스레드" , "Test"};


array_1 = new ArrayList<>( );


/**
* String 배열 ArrayList 변환
*/
array_1.addAll( Arrays.asList( str_arrary ) );

/**
* 그 값을 new ArrayList<>() 에 대입
*/

array_2 = new ArrayList<>( array_1 );

/**
* Collections 진행
*/

Collections.shuffle( array_1 );

Log.e( " array_1 : " , "" + array_1);
Log.e( " array_2 : " , "" + array_2);


}
}






반응형
Comments