눈부시도록 아름다운 그래서 바라볼 수 없는

자바로 Array 복사를 어떻게 할 수 있을까?

Arrays 클래스에는 따로 복사하는 메소드는 없는데.. 흠

이럴땐 List 클래스를 이용하는 것이 가장 편하다.  한번 알아보자.

 

 public void testArrayCopy() 
 {
  List alTest = new ArrayList();
  String[] arrTest = { "1", "2", "3"};
  alTest = Arrays.asList( arrTest);
    
  List alTest2 = new ArrayList();
  String[] arrTest2 = { "4", "5", "6"};
  alTest2 = Arrays.asList( arrTest2);

 

  System.out.println( "alTest 사이즈 : " + alTest.size());
  System.out.println( "alTest2 사이즈 : " + alTest2.size());

 

  List alTotal = new ArrayList();
  alTotal.addAll( alTest);
  alTotal.addAll( alTest2);
  
  System.out.println( "alTotal 사이즈 : " + alTotal.size());
  
  for( int i = 0; i < alTotal.size(); i++)
  {
   System.out.println(i + ") = " + alTotal.get( i));
  }
 }

 

결과값

alTest 사이즈 : 3
alTest2 사이즈 : 3
alTotal 사이즈 : 6
0) = 1
1) = 2
2) = 3
3) = 4
4) = 5
5) = 6

여기서 중요한 것은 위의 볼드체이다. 왜 새로운 ArrayList클래스인 alTotal를 만들어서 하고 있는걸까?

그냥 alTest.addAll( alTest2); 이렇게 하면 안되는걸까?

 

만약 위의 블루색깔처럼 Arrays.asList로 만들지 않고

alTest.add("1"), alTest.add("2")... 이런식으로 ArrayList를 만들었다면

alTest.addAll( alTest2);이 가능하다.

 

헌데 Arrays.asList로 만들었다면 한번에 넣을수는 없다. 아래와 같은 에러메시지만 반겨준다.

 

java.lang.UnsupportedOperationException
 at java.util.AbstractList.add(AbstractList.java:150)
 at java.util.AbstractList.add(AbstractList.java:88)
 at java.util.AbstractCollection.addAll(AbstractCollection.java:319)

즉 이렇게 기억하자.

Arrays.asList로 만든것은 새로운 ArrayList를 만들어서 합쳐준다.

그냥 list의 add()로 만든것은 기존의 ArrayList를 이용한다.

 

 

참고로 JDK 1.5 부터는 Collections.addAll을 이용하면 편하다.

그렇다면 위의 소스는 아래처럼 아주 짧게 바뀐다.

 

  List alTest = new ArrayList();
  String[] arrTest = { "1", "2", "3"};
  alTest = Arrays.asList( arrTest);
    
  String[] arrTest2 = { "4", "5", "6"};

  Collections.addAll( alTest, arrTest2);

[출처] JAVA Array 복사|작성자 협객


출처: http://bluejames77.blog.me/80085880865
Posted by 휘루걸음
TAG , ,

댓글을 달아 주세요

  1. 자바개발자 2012.03.19 15:10

    눈부신 기술입니다~^^ 많은 도움이 되었어요~

  2. Collections.addAll( alTest, arrTest2); // 오류 발생
    밑에 처럼 해야 함
    List alTest = new ArrayList();
    Collections.addAll( alTest, arrTest);
    Collections.addAll( alTest, arrTest2);