2019년 11월 6일 수요일

Java ArrayList 활용법

오늘 포스팅 할 내용은 Java 에서 주로 쓰이는 ArrayList 활용법에 대한 강좌 입니다.

ArrayList 는 가변 리스트 배열을 관리 하는 클래스 입니다.

ArrayList<DataType> variable = new ArrayList<DataType>(); 과 같이 선언 하여 씁니다.

간단히 1부터 100까지 변수를 추가하여 값을 출력하는 코드를 만들면서 멤버를 접근 하는 방법은 전통적인 방식/Iterator 를 이용하는 방법/고속 접근 방법을 이용하는 법을 샘플에 적용하여 만들어 보겠습니다.


package process;

import java.util.ArrayList;
import java.util.Iterator;

public class ArraySample
{
 public static void main(String[] args) throws Exception
 {
  ArrayList<Integer> arrTest = new ArrayList<Integer>();

  for (int i=0; i<100; i++)
  {
   arrTest.add(Integer.valueOf(i));
  }

  //전통적인 접근 방법.
  for (int i=0; i<arrTest.size(); i++)
  {
   System.out.println(String.format("Normal i(%d)=[%d]", i, arrTest.get(i)));
  }

  //iterator 를 통한 접근 방법.
  Iterator<Integer> iteLoop = arrTest.iterator();
  while(iteLoop.hasNext())
  {
   System.out.println(String.format("iterator [%d]", iteLoop.next())); 
  }

  //진보된 접근 방법.
  for (Integer nTemp : arrTest )
  {
   System.out.println(String.format("Advance Access [%d]", nTemp));  
  }
 }
}
< 위 코드는 우분투 환경에서 javac 1.8.0_232-ea 에서 빌드 되었습니다 >

ArrayList 관련 상세한 인터페이스는 https://cr.openjdk.java.net/~iris/se/11/latestSpec/api/java.base/java/util/ArrayList.html#%3Cinit%3E() 여기서 확인 하실수 있습니다.

​제가 여기서 추가로 설명하고자 하는것은 제가 자주 사용하던 패턴과 사용함에 있어 필요로 생각하는 요소들만 정리해서 안내 해드리겠습니다.

​a. add(E) : ArrayList 에 순차적으로 멤버를 추가 해주는 메소드 입니다. 위 샘플에서도 확인 하실수 있듯이 멤버에 대한 순차적 추가로 쓰실수 있습니다.
b. size : ArrayList 에 저장된 멤버에 대한 갯수를 리턴해주는 메소드 입니다.
c. clear : ArrayList 에 저장된 멤버를 모두 지우는 메소드 입니다.
d. remove : ArrayList 에 저장된 멤버중 하나 지우는 메소드 입니다.
e. add(index, E) : ArrayList 에 멤버를 추가 할때 순서가 아닌 특정 위치에 추가 할수 있는 메소드 입니다.
f. get : index 를 이용하여 위치에 해당하는 멤버를 리턴합니다.
g. set : index 를 이용하여 위치에 해당하는 멤버를 변경합니다.
h. indexOf : 멤버중 입력으로 파라메터와 동일한 값을 가진 멤버의 인덱스를 리턴합니다.

위 설명된 항목들을 활용한 샘플 코드를 만들어 보겠습니다.


package process;

import java.util.ArrayList;
import java.util.Iterator;

public class ArraySample2
{
 public static void main(String[] args) throws Exception
 {
  ArrayList<Integer> arrTest = new ArrayList<Integer>();

  for (int i=0; i<100; i++)
  {
   arrTest.add(Integer.valueOf(i));
  }

  //추가된 멤버의 갯수 출력.
  System.out.println(String.format("arrTest Count : %d", arrTest.size()));

  //20번쨰 위치에 200 엠버 추가.
     arrTest.add(20, Integer.valueOf(200));

     System.out.println(String.format("arrTest Count : %d, arrTest[20]=%d", arrTest.size(), arrTest.get(20)));

     //20번째 삽입한 200 멤버 제거.
     arrTest.remove(20);

     System.out.println(String.format("arrTest Count : %d, arrTest[20]=%d", arrTest.size(), arrTest.get(20)));

     // 멤버 값중 88 값 있는지 체크.
     if (arrTest.indexOf(Integer.valueOf(88)) > 0)
      System.out.println(String.format("arrTest has 88 as a member."));      
     else
      System.out.println(String.format("arrTest does not have 88 as a member."));      

     //50 ~ 99 멤버 삭제.
     for (int i=50; i<100; i++)
      arrTest.remove(50);

     System.out.println(String.format("arrTest Count : %d", arrTest.size()));
     for (Integer nTemp : arrTest )
  {
   System.out.println(String.format("arrTest Member [%d]", nTemp));  
  }

  //전체 멤버 삭제.
  arrTest.clear();

  System.out.println(String.format("arrTest Count : %d", arrTest.size()));  
 }
}

ArrayList 의 기능은 제가 링크를 걸은 곳에서 더 많은 기능을 확인 하실수 있습니다.

위 코드 중에 구간 삭제시에 ArrayList 에서 removeRange 라는 멤버 함수를 제공 하는데 이것은 protected 로 제공 되기 때문에 클래스를 상속하여 구현 하는 방법입니다.

구간 삭제시 50번째를 지속적으로 지우는것은 하나를 지울때 마다 인덱스 값이 변하기 때문에 해당 값을 지우면서 동일한 효과를 볼수 있습니다.

댓글 없음: