본문 바로가기
Java

[Java 자료구조] ArrayList

by happyhelen 2021. 7. 13.

Java는 배열과 리스트를 각각 지원한다.

배열의 단점은 1) 생성시 지정된 크기를 변경할 수 없고, 2) 배열 안에서 설정된 요소의 개수를 셀 수 없다.

이를 극복하기 위한 것이 리스트인데, ArrayList와 LinkedList 두종류가 있다.

ArrayList는 데이터의 추가와 삭제가 느리지만 인덱스로 접근하는 속도가 빠르고, LinkedList는 그 반대이다.

리스트는 데이터의 추가, 삭제에 따라 순서가 밀리고 당겨진다. 

 

 

[1] ArrayList  생성

우선 ArrayList를 import 해야한다. 그리고 나서 생성

ArrayList<Integer> list1 = new ArrayList<>(); // 우변의 타입 생략가능
ArrayList<String> list2 = new ArrayList<>(30); // 메모리 용량Capacity 초기설정, 가변적
ArrayList<Long> list3 = new ArrayList<>(long1); // 다른 Collections값으로도 생성가능
ArrayList<Character> list4 = new ArrayList<>(Arrays.asList('a','b','c')); // ArrayList 활용, 원소추가?

 

[2] ArrayList 추가/변경/삭제

// 추가 .add()
list1.add(10); // .add(값)
list1.add(20);

// 변경 .set()
list1.set(0, 20); // .set(인덱스, 값)

// 삭제 .remove()
list1.remove(0); // .remove(인덱스), 요소값 리턴받아 활용가능
list1.remove(20); // .remove(값)
list1.clear(); // 전체삭제

 

[3] ArrayList 조회

list.get(인덱스) : 해당 인덱스의 값 조회

list.size() : 리스트의 크기 // list.length X

hasNext() : 불린타입반환

next() : 그게 무엇이든 반환

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;

public class ListPractice {
	public static void main(String[] args) {
    
		ArrayList<Character> eng = new ArrayList<>(Arrays.asList('a','b','c','d','e'));
		
		// [1] for문 조회
		for(int i=0; i<eng.size(); i++) {
			System.out.println(eng.get(i));
		}
		
		// [2] 향상된 for문 조회
		for(Character chr : eng) {
			System.out.println(chr);
		}
		
		// [3] 반복자 iterator 조회
		Iterator<Character> itrt = eng.iterator();
		while(itrt.hasNext()) {
			System.out.println(itrt.next());
		}
        
		// [4] listIterator 조회
		ListIterator<Character> listItrt = eng.listIterator();
		while(listItrt.hasNext()) { // .hasNext(), .next() 대신 .hasPrevious() , .previous() 사용시 역순회가능
			System.out.println(itrt.next());
		}
	}
}

 

[4] 값이 존재하는지 확인할때

// [1] 값이 존재하는지 여부만 알고싶을때
boolean be = eng.contains('a'); // .contains(값) -> 불린리턴

// [2] 값이 존재하는 위치를 알고싶을때
int where = eng.indexOf('b'); // .indexOf(값) -> index리턴
int nothere = eng.indexOf('k'); // 존재하지않으면 -1리턴