본문 바로가기

Languages/JAVA

[JAVA] ArrayList 의 개념, 사용법, 예제

 

ArrayList를 알아봅시다! 😉


오늘은 ArrayList의 사용법에 대해서 알아봅시다.


ArrayList는 List 인터페이스를 상속받은 여러 클래스들 중 하나입니다.

List를 상속받는 클래스들

ArrayList은 여러 데이터를 순서대로 관리하고 싶을 때 사용합니다.

그럼 ArrayList와 일반 배열과의 차이점은 무엇일까요?

 - ArrayList와 일반 배열과의 차이점은 ArrayList는 크기가 가변적으로 변한다는 것 입니다.

int[] nums = new int[5];

이렇게 배열은 배열을 선언할 때 방의 갯수도 선언해주기때문에 크기를 바꿀 수 없습니다.


이제 ArrayList를 사용해봅시다!

 

import java.util.ArrayList;

ArrayList를 사용하기 위해서는 이 문장을 import 해야합니다.

 


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

String type을 저장할 수 있는 ArrayList를 생성해서 참조값을 names 라는 지역변수에 담아봅시다.

 

제너릭 클래스이기 때문에 <> 안에는 다양한 type이 들어갈 수 있습니다. 

 

ex)

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

 

이때 ArrayList는 클래스, List는 인터페이스입니다.

즉, List는 도형, ArrayList는 직사각형이라고 보시면됩니다.

그렇기 때문에 List의 사용은 ArrayList<String> names = new ArrayList<>(); 보다 유연성을 높혀줍니다.


인덱스 추가

names.add("김00");
names.add("이00");
names.add("박00");

이제 ArrayList에 방을 추가해봅시다.

인덱스 추가는 add를 사용합니다.

 


배열의 크기

int size = names.size();

ArrayList의 배열의 크기는 size를 사용합니다.


 

인덱스 내용 가져오기

String name1 = names.get(0);
String name2 = names.get(1);
String name3 = names.get(2);

get(index)을 사용하면 특정방에 저장된 내용을 참조할 수 있습니다.


특정 방의 값 수정(덮어쓰기)

String prevName = names.set(0, "최00");

set(index, content)를 사용하면 특정 방의 값을 수정할 수 있습니다.

 


특정 인덱스 삭제(방 자체를 제거하기)

names.remove(0);
names.remove("최00");

특정 인덱스 삭제는 remove를 사용합니다.

이때 index를 사용하여 제거할 수 도 있고 참조값을 사용하여 제거할 수도 있습니다.

 

cf) Integer의 remove

 

인덱스를 활용한 삭제

nums.remove(1);

 

참조값을 활용한 삭제

Integer value = 20;
nums.remove(value);

nums.remove(new Integer(20));

 


모든 방을 다 삭제

names.clear();

clear는 모든 방을 전부 삭제해줍니다.

 


예제

package test.main;

import java.util.ArrayList;
import java.util.List;

import test.mypac.Member;

public class MainClass04 {
   public static void main(String[] args) {
      // Member type 을 저장할수 있는 ArrayList 객체를 생성해서 참조값을 members 라는
      // 지역변수에 담아 보세요.
      List<Member> members=new ArrayList<>();
      //Member 객체를 하나 생성해서 참조값을 mem1 이라는 지역 변수에 담아 보세요
      Member mem1=new Member();
      // mem1 를 이용해서 회원 한명의 정보를 담아 보세요.
      mem1.num=1;
      mem1.name="김구라";
      mem1.addr="노량진";
      
      //Member 객체를 하나 생성해서 참조값을 mem2 이라는 지역 변수에 담아 보세요
      Member mem2=new Member();
      // mem2 를 이용해서 회원 한명의 정보를 담아 보세요.
      mem2.num=2;
      mem2.name="해골";
      mem2.addr="행신동";
      //mem1 과 mem2 에 들어 있는 참조값을 members 를 이용해서 위에서 생성된 배열(ArrayList)에 저장해 보세요.
      members.add(mem1);
      members.add(mem2);
      
      //아래 코드의 의미를 이해할수 있도록 곰곰히 생각해 보세요~ 
      List<Member> a=members;
      Member b=members.get(0);
      int c=members.get(0).num;
      String d=members.get(0).name;
      String e=members.get(0).addr;
      
      //members 가변배열에 저장된 값을 이용해서 회원 목록을 아래와 같은 형식으로 
      //반복문을 활용해서 출력 되도록 해 보세요.
      /*
       *  번호 => 1, 이름 => 김구라, 주소 => 노량진
       *  번호 => 2, 이름 => 해골, 주소 => 행신동
       *  .
       *  .
       *  .
       */
      for(int i=0; i<members.size(); i++) {
         //i 번째 방의 Member 객체 참조
         Member tmp=members.get(i);
         //출력할 문자열 구성
         String line="번호=>"+tmp.num+" 이름=>"+tmp.name+" 주소=>"+tmp.addr;
         //출력하기
         System.out.println(line);
      }
      
      for(Member tmp:members) {
    	  String line="번호=>"+tmp.num+" 이름=>"+tmp.name+" 주소=>"+tmp.addr;
          System.out.println(line);
      }
   }
}