컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Sunday, September 24, 2006

자바/Java] 동적 배열 크기 확장 조절 / 숫자 문자열 혼합 배열 만들기 - Perlish Array


자바의 배열은 정적입니다. 미리 크기가 정해져 있기에, 나중에 요소를 추가할 수 없습니다. 만약 추가한다면 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 이런 에러가 나게 됩니다.

텍스트 파일 등을 다룰 때는, "펄(Perl)"의 배열처럼, 실시간으로 늘어나는 배열이 편리합니다.

펄의 배열은 크기 제한이 없어서, 실행시에 아무 값이나 넣어도 고무줄처럼 쭉쭉 늘어나게 됩니다. 그리고 문자열과 숫자를 한꺼번에 넣을 수도 있습니다.

그래서 자바의 ArrayList 를 사용해서, 펄 스타일의 배열을 구현해 보았습니다. 적어도 제가 보기로는 펄의 배열과 똑같이 잘 작동했습니다. (자바 1.5 버전에서 테스트했습니다.)


oPerlishArray 라는 배열에 add() 메소드로 요소들을 마음대로 추가하면, oPerlishArray 배열의 크기가 자동으로 늘어나게 됩니다. 인덱스 번호로 지정하지 않고, 그냥 뒤쪽에 요소들이 추가됩니다.

펄에서 흔히 그렇게 하듯, 텍스트 파일을 통째로 배열에 넣어서 처리할 때 편리할 것입니다.

그런데 이런 동적 배열은 속도가 떨어지고 메모리 관리도 비효율적이기에, 꼭 필요한 경우에만 사용해야 합니다. 물론 텍스트 파일 처리 등에서는 퍼포먼스가 떨어지더라도 차이를 체감할 수는 없을 것입니다.


ArrayList 예제: 배열 요소 추가, 배열 크기 조절 Array Resize


파일명: Foo.java
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
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));

  }
}



배열에 정수만을 넣기 위해서는
List<Integer> oPerlishArray = new ArrayList<Integer>();
이렇게 <Integer> 로 변경합니다.

문자열만 넣으려면 다음과 같이 합니다.
List<String> oPerlishArray = new ArrayList<String>();

펄(Perl)처럼 모든 타입을 가리지 않고 넣으려면 다음과 같이 합니다.
List<Object> oPerlishArray = new ArrayList<Object>();



<Integer> <Object> <String> 이런 것은, 어떤 타입의 데이터가 저장될지 명시하는 것입니다.

만약 <String> 즉 문자열 데이터로 지정한 후에, 정수를 넣으면 다음과 같은 에러가 발생하게 됩니다.

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: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.





위의 예제 실행 결과:
(2번 인덱스부터가, for문을 사용해, 대량으로 입력한 것임)
[0] = 123
[1] = 하하하
[2] = 10
[3] = 11
[4] = 12
[5] = 13
[6] = 14
[7] = 15
[8] = 16
[9] = 17
[10] = 18
[11] = 19
[12] = 20
[13] = 21
[14] = 22
[15] = 23
[16] = 24
[17] = 25

...중략...

[87] = 95
[88] = 96
[89] = 97
[90] = 98
[91] = 99
[92] = 100





tag: java
자바 | Java

2 Comments:
At November 9, 2011 at 12:24 AM, Blogger nBirdYuika said...

mwultong님 정말 감사합니다 ㅠㅠ

맨날 mwultong 님 블로그에서 신세만 ㅠㅠ

절대로 블로그 닫으시면 안되요 ㅠㅠㅠㅠㅠㅠ제발제발 ㅠㅠㅠㅠㅠ

redeyesofangel.tistory.com eizt 올림

 
At November 9, 2011 at 8:47 AM, Blogger mwultong said...

영원히 안 닫습니다^^

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top