Java 컬렉션 : ArrayList

I C-AN·2021년 8월 2일
0

Java

목록 보기
19/26
post-thumbnail

List : ArrayList

ArrayList는 기존의 Vector를 개선한 것으로 구현원리가 기능적으로 동일하다. ArrayList와 다르게 Vector는 자체적으로 동기화처리가 되어 있다. List 인터페이스를 구현하므로, 저장 순서가 유지되고 중복을 허용하며 Object 배열을 이용하여 데이터를 저장한다. 배열에 저장공간이 없으면 큰 새로운 배열을 자동으로 생성하고 복사하여 저장한다.

ArrayList 생성자

ArrayList() // 기본 생성자
ArrayList(Collection c) // 컬렉션을 ArrayList로 변환
ArrayList(int initialCapacity) // 배열의 길이를 지정하여 생성

ArrayList 예제 1

class ArrayListEx1 {
	public static void main(String[] args) {
		// 기본 길이(capacity)가 10인 ArrayList 생성
		ArrayList list1 = new ArrayList(10);
        
		// ArrayList에는 객체만 저장 가능
		// autoboxing에 의해 기본형이 참조형으로 자동 변환
		list1.add(5); // list1.add(new Integer(5));
		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(Collection c)
		ArrayList list2 = new ArrayList(list1.subList(1, 4));
		print(list1, list2);

		// Collection은 인터페이스, Collections는 클래스
		Collections.sort(list1); // list1과 list2를 정렬
		Collections.sort(list2); // Collections.sort(List l)
		print(list1, list2);

		// list1이 list2의 모든 요소를 포함하는 지 확인하는 containsAll()
		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에서 list2와 겹치는 부분만 남기고 나머지는 삭제
		System.out.println("list1.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);
	} 

	static void print(ArrayList list1, ArrayList list2) {
		System.out.println("list1:" + list1);
		System.out.println("list2:" + list2);
		System.out.println();
	}
} 
list1:[5, 4, 2, 0, 1, 3]
list2:[4, 2, 0]

list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4]

list1.containsAll(list2):true
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, A, B, C]

list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, AA, B, C]

list1.retainAll(list2):true
list1:[0, 2, 4]
list2:[0, 2, 4, AA, B, C]

list1:[0, 2, 4]
list2:[AA, B, C]

ArrayList 예제 2

cclass prac {
	public static void main(String[] args) {
		final int LIMIT = 10; // 자르고자 하는 글자의 개수를 지정
		String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
		int length = source.length();

		// 크기를 약간 여유 있게 잡는다
        // 크기를 지정하지 않아도 자동으로 크기가 늘어나지만 처리시간이 많이 소요된다
		List list = new ArrayList(length / LIMIT); 

		for (int i = 0; i < length; i += LIMIT) {
			if (i + LIMIT < length)
				list.add(source.substring(i, i + LIMIT)); // i부터 10개씩 
			else
				list.add(source.substring(i));
		}

		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}
}
0123456789
abcdefghij
ABCDEFGHIJ
!@#$%^&*()
ZZZ
profile
할 수 있다

0개의 댓글