버글버글

Java 수업 기록 (16) Collection Framework - ArrayList 본문

java/java 수업 기록

Java 수업 기록 (16) Collection Framework - ArrayList

Bugle 2022. 8. 8. 18:00
반응형

▶ 컬렉션 프레임워크(Collection Framework) 

1. 여러 데이터를 쉽고 효과적으로 처리할 수 있도록 제공하는 클래스

2. 자료 구조(Data Structure)와 알고리즘(Algorithm)을 구조화한 클래스

3. 자바 인터페이스(Interface)를 구현한 형태로 작성된 클래스

 

* 주요 컬렉션 프레임워크 인터페이스

List 인터페이스 Set 인터페이스 Map 인터페이스
1. 목록 관리
2. 순서 있는 목록
3. 배열 대신 사용
4. 요소 추가/삭제/수정
5. 요소의 중복 저장 가능
add()
1. 집합 관리

2. 순서 없는 목록
3. 교집합/합집합/차집합 등
4. 요소 추가/삭제/수정
5. 요소의 중복 저장 불가능
put()
1. 데이터를 쌍으로 관리
2. key : 데이터 식별 수단
3. Value : 데이터
4. 요소 추가/삭제/수정
5. Key는 중복 저장 불가능
Value는 중복 저장 가능

list와 set은 collection의 자식이다.

생성 방법
ArrayList list = new ArrayList();
Lits lits = new ArrayList();    // 업캐스팅

▶ ArrayList 인터페이스 

1. 제네릭(Generic) 기반

  - 어떤 컬렉션 프레임워크를 생성할 떄 어떤 타입을 저장할 것인지 구체적으로 명시하는것

  - 제네릭으로 지정 가능한 타입은 오직 참조 타입(Reference Type)만 가능

  - 기본 타입(Primitive Type)을 저장하려면 Wrapper Class 타입으로 처리


2. 생성할 때 데이터타입을 결정(구체화)

import java. util.List;

 

3. 배열(Array)을 리스트로 구현한 클래스

4. 배열보다 쉬운 사용법을 제공

ArrayList 주요기능
리스트 길이 자동 세팅
요소의 추가/수정/삭제
인덱스 기반의 접근
특정 요소 조회
리스트와 배열의 상호 변환

*ArrayList 주요 메소드

메소드 역할
boolean add(E element) 마지막에 element 추가. 성공하면 true 반환
void add(int index, E element) index 위치에 element 추가
boolean addAll(Collectrion < ? extends E> c) 마지막 컬렉션 c의 모든 요소 추가. 성공하면 true 반환
void clear() 모든 요소 제거
boolean contains(Object o) 객체 o를 포함하고 있으면 true 반환
E get(int index) index 위치의 요소 반환
E set(int index, E element) index 위치의 기존 요소를 element로 변경. 변경된 요소 반환
boolean isEmplty() 비어 있으면 true 반환
E remove(int index) index 위치의 element 제거. 제거된 요소 반환
boolean remove(Object o) 객체 o 와 동일한 요소 제고. 성공하면 true 반환
int size() 요소들의 개수 반환
Object[] toArray() 리스트의 모든 요소들을 포함하는 Object 타입의 배열 반환

* 생성

		List<String> list = new ArrayList<String>();

* 요소 추가

1. 인덱스 지정이 없으면 순서대로 저장

2. 인덱스 지정도 가능

		list.add("월");		// 인덱스 값 미지정 // 인덱스 : 1
		list.add("화");		// 인덱스 값 미지정 // 인덱스 : 2
		list.add(0, "일");	// 인덱스 값 지정 // 인덱스 : 0

 

* 요소 제거

1. boolean remove(Object obj) : obj 제거. 성공하면 true 반환
2. Object remove(int index) : index 위치의 요소 제거. 제거한 요소를 반환

		boolean result = list.remove("일");

* 요소 수정

1. 객체.set(index, String)

		list.set(0, "일");	// 0번 인덱스를 화요일 > 일요일로 수정

* 리스트의 초기화

1. 배열을 리스트로 변환하는 과정

		List<String> list = Arrays.asList("일", "월", "화", "목");

 

*리스트의 길이

		List<String> list = Arrays.asList("일", "월", "화", "목");
		
		int size = list.size();
		System.out.println(size);	// 4

* 개별 요소

		List<String> list = Arrays.asList("일", "월", "화", "목");
        
		String element1 = list.get(0);
		String element2 = list.get(1);
		String element3 = list.get(2);
		String element4 = list.get(3);
		System.out.println(element1);	// 일
		System.out.println(element2);	// 월
		System.out.println(element3);	// 화
		System.out.println(element4);	// 목

* for 문 순회

		List<String> list = Arrays.asList("일", "월", "화", "목");
		for(int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
        // 일 월 화 목

* 위와 같은 코드는 list.size(); 라는 메소드가 4번이나 출력 되기 때문에, 성능이 저하된다.

   따라서 아래와 같은 코드로 보완이 가능하다.

		List<String> list = Arrays.asList("일", "월", "화", "목");
        
			for(int i = 0, length = list.size(); i < length; i++) {
			System.out.println(length);
			}

- 향상 for문

		List<String> list = Arrays.asList("일", "월", "화", "목");
        		for(String element : list) {
			System.out.println(element);
		}

 

▶ Wrapper 클래스 

1. 자바의 기본 타입(Primitive Type)을 클래스화한 8개의 클래스

2. 기본 타입은 값만 저장할 수 있으나 Wrapper 클래스는 기본 타입의 값과 기능을 제공

3. 기본 타입을 참조 타입(Reference Type)으로 변경할 때 사용

기본타입 boolean char byte short int long float double
Wrapper Boolean Character Byte Short Interger Long Float Double
		List<Integer> list = new ArrayList<Integer>();
		
		list.add(1); // 정수 저장.
		list.add(2);
		list.add(3);
		
		System.out.println(list);	// [1, 2, 3]

* 비어 있는 리스트 인가?

		List<Integer> list = new ArrayList<Integer>();

		list.add(1);
		list.add(2);
		list.add(3);
        
        boolean result = list.isEmpty();
		System.out.println(result);				// false

* 특정 요소를 포함하고 있는가?

		List<Integer> list = new ArrayList<Integer>();
		
		list.add(1);
		list.add(2);
		list.add(3);
        
     	if(list.contains(4)) {
			System.out.println("4를 포함한다.");
		} else {
			System.out.println("4를 포함하지 않는다.");
		}
        // 4를 포함하지 않는다.

 

 

▶ 기타사항 

* 마침표 3개(...)은 갯수가 정해지지 않은 것이다.

		List<String> list = Arrays.

위 코드에서 Arrays. ctrl + space bar 하면 asList(T... a) 가 보일텐데, String이 몇개가 와도 상관 없다는 말이다.

 

* 객체끼리의 비교는 equals()를 사용해야 한다.

 - 객체의 비교가 필요할 때는 equals를 override를 사용해 줘야 한다.

 

반응형