반응형

1. 동적배열 

  - 크기확장, 숫자 문자열 혼합 : perlish array 

자바의 배열은 정적이다. 미리 크기가 정해져 사용하기 때문에 나중에 요소를 추가 할 수 없다. 만약 추가를 시도 하면 

Exception in thread "main" java.lang.ArrayIndexOutOfBounndsException : 에러가 난다.

여기에 펄(perl) 배열이라는 것이 있다. 실시간으로 늘어 나는 배열로 편리 하다.

펄의 배열은 크기 제한이 없고, 문자열과 숫자를 한꺼번에 넣를 수도 있다. 

배열이라기 보단 리스트 개념이 보이는 배열이다.

http://mwultong.blogspot.com/2006/09/java-perlish-array.html 에 있는 

소스 내용을 참고로 사용해 보기로 한다.

------------------------------------------------------------------

import java.util.*;

public class Foo {

  public static void main(String args[]) {

    List<Object> oPerlishArray = new ArrayList<Object>();

    // 배열 요소 몇 개 채우기, 문자열 숫자 가리지 않고

    oPerlishArray.add(123);

    oPerlishArray.add("하하하");

    // 이제는 배열 요소 (숫자) 한꺼번에 채우기

    for (int x = 10; x <= 100; x++) oPerlishArray.add(x);

    // 배열 출력

    for (int i = 0; i < oPerlishArray.size(); i++)

      System.out.format("[%d] = %s%n", i, oPerlishArray.get(i));

  }

}

-------------------------------------------------------------------

oPerlishArray라는 배열에 add() 메소드로 요소들을 마음대로 추가하면, oPerlishArray 배열의 크기가 자동으로 늘어 나게 된다. 추가된 내용은 뒤쪽에 요소들이 추가 된다.

텍스트 파일을 통째로 넣어 처리 할때 편하게 쓸 수 있다.

단, 이런 동적 배열은 속도가 떨어며, 메모리 관리도 비효율적이기에 꼭 필요한 경우에만 사용해야 한다. 물론 텍스트 파일 처리 등에서는 차이를 체감 하기는 힘들것이다.

TIP

배열에 정수만을 넣기 위해서는

List<Integer> oPerlishArray = new ArrayList<Integer>();

문자열만 넣으려면 

List<String> oPerlishArray = new ArrayList<String>();

모든 타입을 가리지 않고 넣으려면 

List<Object> oPerlishArray = new ArrayList<Object>();

이와 같이 선언 하면 된다.


문자열 지정후 정수를 넣으면 다음과 같은 에러가 난다고 한다.

Foo.java:11: cannot find symbol

symbol  : method add(int)
location: interface java.util.List<java.lang.String>
    oPerlishArray.add(123);
                 ^
Foo.java:15: cannot find symbol
symbol  : method add(int)
location: interface java.util.List<java.lang.String>
    for (int x = 10; x <= 100; x++) oPerlishArray.add(x);
                                                 ^
2 errors

만일 타입을 정의 하지 않으면 이런 경고가 나온다.

Note: ***.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

여기 까지....

실행 해 보도록



반응형

+ Recent posts