본문 바로가기

자바공부

ArrayList<E>, 자바 명품 프로그래밍 7장

728x90
반응형

* ArrayList<E>는 가변 크기의 배열을 구현한 컬렉션 클래스이다.

경로명: java.util.ArrayList

Vector 클래스와 거의 동일하지만 차이점

ArrayList는 스레드간 동기화를 지원하지 않는다.

다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList의 데이터가 훼손될 우려가 있다.

하지만 멀티스레드 동기화를 위한 시간 소모가 없기 때문에, ArrayList는 Vector보다 속도가 빨르다.

단일 스레드 응용에는 ArrayList가 더 효과적이다.

ArrayList<String> 객체의 내부 구성

메소드 설명
boolean add(E element) ArrayList의 맨 뒤에 element 추가
void add(int index, E element) 인덱스 index 위치에 element 삽입
boolean addAll(Collection< ? extends E> c) 컬렉션 c의 모든 요소를 ArrayList의 맨 뒤에 추가
void clear() ArrayList의 모든 요소 삭제
boolean contains(Object o) ArrayList가 지정된 객체를 포함하고 있으면 true 리턴
E elementAt(int index) index 인덱스의 요소 리턴
E get(int index) index 인덱스의 요소 리턴
in indexOf(Object o) o와 같은 첫 번째 요소의 인덱스 리턴, 없으면 -1 리턴
boolean isEmpty() ArrayList가 비어있으면 true 리턴
E remove(int index) index 인덱스의 요소 삭제
boolean remove(Object o) o와 같은 첫 번째 요소를 ArrayList에서 삭제
int size() ArrayList가 포함하는 요소의 개수 리턴
Object[] toArray() ArrayList의 모든 요소를 포함하는 배열 리턴

 

ArrayList<String>의 생성 요소 삽입 삭제 사례

* 문자열 입력받아 ArrayList에 저장

package Ch7_Ex;

import java.util.*;

public class ArryaListEx {
	public static void main(String[] args) {
		// 문자열만 삽입 가능한 ArrayList 생성
		ArrayList<String> a = new ArrayList<String>(); // var a = new ArrayList<String>(); 로 간략하게 바꾸어 쓸 수 있다.
		
		// 키보드로부터 4개의 이름을 입력받아 ArrayList에 삽입
		Scanner sc = new Scanner(System.in); 	// Scanner 객체 생성
		for(int i=0; i<4; i++) {
			System.out.print("이름을 입력하세요>>");
			String s = sc.next();
			a.add(s);	// ArrayList 컬렉션에 삽입
		}
		
		// ArrayList에 들어 있는 모든 이름 출력
		for(int i = 0; i<a.size(); i++) {
			String name = a.get(i);
			System.out.print(name + " ");
		}
		
		// 가장 긴 이름 출력
		int longestIndex = 0; // 현재 가장 긴 이름이 있는 ArryaList 내의 인덱스
		for(int i=0; i<a.size(); i++) {
			if(a.get(longestIndex).length()<a.get(i).length())	// 이름 길이 비교
				longestIndex = i;	// i 번째 이름이 더 긴 이름임
		}
		System.out.println("\n가장 긴 이름은 : " + a.get(longestIndex));
		sc.close();
	}
}
반응형