자바의 정석 - ArrayList

송용준·2023년 3월 30일
0

ArrayList

  • ArrayList는 기존의 Vector를 개선한 것으로 원리와 기능이 동일
  • ArrayList는 Vector와 달리 동기화 되어있지 않다.
  • 저장 순서 o, 중복 o

ArrayList의 메서드

  • 생성자 (ArrayList())
  • 추가 (add, addAll)
  • 삭제 (remove, removeAll)
  • 검색 (indexOf, contains, get, set) --> contains : ~가 있는지 / get : 객체 읽기 / set : 위치 객체를 바꾸기)
    ++ subList : 일부 뽑아서 새로 만들기
    ++ toArray : ArrayList의 개게배열을 반환
    ++ isEmpty : 비어있는지 확인
    ++ trimToSize : 빈공간 제거
    ++ size : 저장된 객체의 갯수

실습

import java.util.*;

class ArrayList_Test {
	public static void main(String[] args) {
		// 기본 길이(용량, capacity)가 10인 ArrayList를 생성
		ArrayList list1 = new ArrayList(10);
		// ArrayList에는 객체만 저장가능
		list1.add(5); // autoboxing에 의해 기본형이 참조형으로 자동 형변환
		list1.add(new Integer(4));
		list1.add(new Integer(2));
		list1.add(new Integer(0));
		list1.add(new Integer(1));
		list1.add(new Integer(3));
		
		ArrayList list2 = new ArrayList(list1.subList(1, 4));
		print(list1,list2);
		
		// Collection은 인터페이스, Collections는 유틸 클래스
		Collections.sort(list1);
		Collections.sort(list2);
		print(list1,list2);
		
		System.out.println("list1.containsAll(list2) : " + list1.containsAll(list2));
		
		list2.add("B");
		list2.add("C");
		list2.add(3, "A");
		print(list1,list2);
//		
		list2.set(3, "AA");
		print(list1,list2);
		
		list1.add(0, "1");
		System.out.println("index = " + list1.indexOf(new Integer(1)));
//		list1.remove(1);		// 인덱스가 1인 객체 삭제
		list1.remove(new Integer(1));	// 1을 삭제
		print(list1, list2);
		
		// list1에서 list2와 곂치는 부분만 남기고 나머지는 삭제한다.
		System.out.println("lsit1.retainAll(list2) : " + list1.retainAll(list2));
		print(list1, list2);
		
		// list2에서 list1에 포함된 객체들을 삭제한다.
		for(int i = list2.size()-1; i >= 0; i--) {
			if(list1.contains(list2.get(i)))
				list2.remove(i);
		}
		print(list1,list2);
		// main의 끝
	}
	
	static void print(ArrayList list1, ArrayList list2) {
		System.out.println("list1 : " + list1);
		System.out.println("list2 : " + list2);
	}
	
}

ArrayList에 저장된 객체의 삭제 과정

  • ArrayList에 저장된 세 번째 데이터(data[2])를 삭제하는 과정. list.remove(2);를 호출

(2) 방식으로 해야 성능상으로도 좋고 다 지울 수 있다.

JAVA API 소스 보기

--> /jdk설치경로/src.zip
--> 볼 필요 없는듯 ...

profile
용용

0개의 댓글