Back-End/JAVA

[Java] ArrayList

챌링킴 2021. 6. 1. 19:05
반응형

1) ArrayList

컬렉션 클래스 중 가장 많이 사용되는 클래스

배열을 이용해서 값을 저장한다.

 

인덱스를 이용하기 때문에 배열 요소에 빠르게 접근 가능하지만, 크기를 늘리기 위해서 새로운 배열을 생성하고

기존의 값들을 옮기는 작업을 한다. (내부적으로) 이러한 이유들 때문에 작업처리 속도가 느리다.

 

배열은 처음에 몇 칸을 할당할지 고정해야 하지만,

ArrayList는 처음에는 0칸이며 값을 넣는 만큼 자동으로 늘어나는 가변배열이다.

 

2) ArrayList 메소드

import java.util.ArrayList;

public class ArListTest {
	public static void main(String[] args) {
		ArrayList<String> arMsg = new ArrayList<>(); // 0칸짜리 arMsg배열이 생성됨

		// ArrayList에 요소 추가하기
		arMsg.add("Hello");
		arMsg.add("Collection");
		arMsg.add("Java");
		arMsg.add("Web");

		// ArrayList의 구조파악하기
		System.out.println(arMsg);
		System.out.println(arMsg.get(0));

		// ArrayList의 요소 가져오기
		for (int i = 0; i < arMsg.size(); i++) {
			System.out.println(arMsg.get(i));
		}

		// ArrayList의 요소 수정하기
		System.out.println(arMsg);
		arMsg.set(0, "Hi");
		System.out.println(arMsg);

		// ArrayList의 요소 삭제하기
		arMsg.remove(3); // 3은 index번호
		arMsg.remove("Hi");
		System.out.println(arMsg);

		// ArrayList의 요소포함 여부
		System.out.println(arMsg.contains(10)); // false
		System.out.println(arMsg.contains("Java")); // true

		ArrayList<Integer> arData = new ArrayList<>();
		arData.add(10);
		arData.add(20);
		arData.add(30);
		arData.add(40);
		arData.add(50);

		arData.remove(1); // 1은 index번호
		arData.remove((Integer) 30); // 아래와 동일
		arData.remove(new Integer(30)); // 박싱해서 객체로 만들기
		System.out.println(arData);
	}
}

 

3) ArrayList 사용시 equals 재정의

import java.util.ArrayList;

public class ArListTest2 {
	public static void main(String[] args) {
		ArrayList<User> arUser = new ArrayList<>();
		arUser.add(new User("apple"));
		arUser.add(new User("banana"));
		arUser.add(new User("cherry"));
		System.out.println(arUser);
		
		arUser.remove(new User("banana"));
        	//User 클래스 내에서 equals 메소드를 재정의해야 정상적으로 객체를 비교한다.
		System.out.println(arUser);
	}
}

class User {
	String userid;

	public User(String userid) {
		this.userid = userid;
	}

	@Override
	public String toString() {
		return userid;
	}

	@Override //equals 재정의
	public boolean equals(Object obj) { 
		if (obj instanceof User) { //obj가 User의 객체인지 확인하는 과정
			User target = (User) obj; //obj를 User로 다운캐스팅
			if (target.userid.equals(this.userid)) { //조건 비교
				return true;
			}
		}
		return false;
	}
}
반응형

'Back-End > JAVA' 카테고리의 다른 글

[Java] HashMap  (0) 2021.06.01
[Java] HashSet  (0) 2021.06.01
[Java] 컬렉션 프레임워크(Collection Framework)  (0) 2021.05.31
[Java] Generic(제네릭)  (0) 2021.05.31
[Java] Wrapper Class  (0) 2021.05.31