BackEnd/Java

[Java] ArrayList

summer_light 2021. 7. 15. 20:06

ArrayList

ArrayList는 List 인터페이스의 구현체이다.

객체가 인덱스로 관리되므로 순서가 있고, 중복을 허용하는 점에서 Array와 유사한 점이 있지만,

Array는 크기가 고정되어 크기 변경이 불가한 반면에,

ArrayList는 크기 변경이 가능하다는 면에서 가장 큰 차이점이 있다.

ArrayList는 저장 용량을 초과한 객체가 들어오면 자동으로 저장용량을 늘린다. 




ArrayList 선언하기 

  1. ArrayList<자료형> 객체명 = new ArrayList<자료형>();
    ArrayList<Integer> al = new ArrayList<Integer>();
  2. ArrayList<자료형> 객체명 = new ArrayList<자료형>(다른 ArrayList)
    public class List03 {
    	public static void main(String[] args) {
    		
    		ArrayList<String> al01 = new ArrayList<String>();
    		al01.add("홍길동");
    		al01.add("김길동");
    		al01.add("이길동");
    		al01.add("박길동");
    		al01.add("최길동");
    		
    		System.out.println(al01);//[홍길동, 김길동, 이길동, 박길동, 최길동]
    		
    		//al02소스로 al01이 와도 값만 가져간다.
    		ArrayList<String> al02 = new ArrayList<String>(al01);
    		al02.add("황길동");
    		System.out.println(al02);//[홍길동, 김길동, 이길동, 박길동, 최길동, 황길동]
    		
    		System.out.println(al01 == al02);//두 객체는 다른 객체. false
    		
    	}
    }​

 


값 추가하기

.add(입력값);

index 0부터 차례대로 값이 추가 됨

al.add(10);//index 0
al.add(20);//1
al.add(30);//2
al.add(40);//3
al.add(50);//4

 


값 호출하기

.get(인덱스);

String str = al.get(0);
String str2 = al.get(3);

 

 

 

 

특정 인덱스의 값 삭제

.remove(index) 

al.remove(0);
//[20, 30, 40, 50]

 


특정 인덱스에 추가 

.add(인덱스, 값)

al.add(0, 1000);
System.out.println(al);//[1000, 20, 30, 40, 50]

 


특정 인덱스 수정

.set(인덱스, 수정할 값)

al.set(al.size() - 1, 5000);
System.out.println(al);//[1000, 20, 30, 40, 5000]

 


그 값이 있는지 찾기

.contains(찾는 값)

  • 있다면: true 반환
  • 없다면: false 반환
System.out.println(al.contains(30));//true
System.out.println(al.contains(50));//false

 

 

찾는 값의 인덱스 반환

indexOf(찾는 값) 

찾는 값이 없다면 -1 반환 

System.out.println(al.indexOf(30));//index 2
System.out.println(al.indexOf(50));//-1 없을경우

 


비어있는지 확인

.isEmpty()

al.isEmpty();



EX01. ArrayList에 랜덤 값 저장하기 

  • 오름차순 정렬: Collections.sort(객체명);
  • 무작위로 섞기: Collections.shuffle(객체명);
package collection.list;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class List04 {
	public static void main(String[] args) {
		
		ArrayList<Integer> al = new ArrayList<Integer>();
		for (int i = 0; i < 10; i++) {
			al.add((int)(Math.random() * 100 + 1));
		}
		System.out.println(al);//[16, 39, 23, 57, 57, 65, 36, 36, 88, 18]
		
		//오름차순 정렬
		//Collections.sort(객체명);
		Collections.sort(al);
		System.out.println(al);//[16, 18, 23, 36, 36, 39, 57, 57, 65, 88]
		
		//무작위로 섞기
		//Collections.shuffle(객체명);
		Collections.shuffle(al);
		System.out.println(al);//[23, 65, 57, 88, 16, 36, 39, 57, 18, 36]
		
		//또다시 바퀴를 발명하지 마라.
	}
}

 

EX02. InnerList

ArrayList 안에 ArrayList 넣기 

[1, 2, 3]

[4, 5, 6]

[7, 8, 9] 출력

		ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
		ArrayList<String> innerList = new ArrayList<String>();
		innerList.add("1");
		innerList.add("2");
		innerList.add("3");
		list.add(innerList);
		
		innerList = new ArrayList<String>();
		innerList.add("4");
		innerList.add("5");
		innerList.add("6");
		list.add(innerList);
		
		innerList = new ArrayList<String>();
		innerList.add("7");
		innerList.add("8");
		innerList.add("9");
		list.add(innerList);
		
		for (ArrayList<String> in: list) {
			System.out.println(in);
		}

출력결과

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

 

※ innerList = new ArrayList<String>(); 을 사용하지 않는다면,

[7, 8, 9]

[7, 8, 9]

[7, 8, 9] 와 같이 출력된다.