상세 컨텐츠

본문 제목

[JAVA] 프레임워크(collection framework)

JAVA/Java 기초

by 미로910 2024. 5. 16. 12:11

본문

자바에서 컬렉션 프레임워크(collection framework)란

  • 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미.
  • 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다. 이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현.

 

● 프로그램 구현에 필요한 자료구조(Data Structure)를 구현해 놓은 JDK 라이브러리 이다.

● java.util 패키지에 구현되어 있음

● 개발에 소요되는 시간을 절약하면서 최적화 된 알고리즘을 사용할 수 있음 (만들어져 있는 걸 활용)

● 여러 구현 클래스와 인터페이스의 활용에 대한 이해가 필요함 

 


List 인터페이스 - 1

  • 자바에서 객체를 순서대로 저장하고 관리할 수 있도록 설계된 인터페이스.
  • 자바의 java.util 패키지에 속하며, 배열이나 연결 리스트 등의 순차적 자료 구조의 구현체를 위한 메서드를 정의.

 

List 인터페이스의 주요 특징

  1. 순서 유지List 인터페이스를 구현하는 자료 구조는 원소들이 삽입된 순서를 유지합니다. 이는 원소들이 리스트 내에서 특정 위치(index)를 가지며, 이 인덱스를 통해 접근할 수 있다는 것을 의미.
  2. 중복 허용:  **List**는 같은 값을 가진 원소의 중복 저장을 허용합니다. 예를 들어, 같은 값을 여러 번 리스트에 추가할 수 있으며, 이는 리스트의 크기를 증가시키고 각각의 원소는 별도의 인덱스를 갖게 된다.
  3. 가변 크기:  **List**의 구현체들은 동적으로 크기가 조절됩니다. 즉, 원소를 추가하거나 제거함에 따라 리스트의 크기가 자동으로 조정.

 

주요 메서드

  • add(E element): 리스트의 끝에 원소를 추가. 
  • get(int index): 지정된 위치의 원소를 반환. 
  • remove(int index): 지정된 위치의 원소를 제거하고 그 원소를 반환. (인덱스 번호만 던지면 반환된다...)
  • indexOf(Object o): 지정된 객체가 처음으로 나타나는 위치의 인덱스를 반환합니다. 객체가 리스트에 포함되어 있지 않은 경우 -1을 반환.

  • size(): 리스트에 있는 원소의 수를 반환.

  • Collection: 모든 컬렉션 클래스의 최상위 인터페이스이다.
  • List: Collection: 인터페이스를 확장하는 순서가 있는 컬렉션을 위한 인터페이스이다. 리스트는 중복을 허용하며, 각 요소가 삽입된 순서에 따라 인덱스로 접근할 수 있다.
  • ArrayList: 내부적으로 배열을 사용하여 요소를 관리하는 List 구현체이다. 요소의 무작위 접근이 빠르다는 장점이 있다.
  • LinkedList: 내부적으로 연결 리스트를 사용하여 요소를 관리하는 List 구현체이다. 요소의 삽입과 삭제가 빠르다는 장점이 있다.
  • Vector: **ArrayList**와 유사하지만, 모든 메서드가 동기화되어 있어 멀티 스레드 환경에서 안전하게 사용할 수 있다.

 

import java.util.AbstractSequentialList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import structure.ch04.Node;

public class MyArrayListTest {

	// 메인 쓰레드
	public static void main(String[] args) {
		
		List mList; // 리스트 인터페이스 계열 
		
		// ArrayList 클래스의 인스턴스화 처리
		ArrayList list = new ArrayList();
		// <E> <-제네릭은 추후 설명 듣기
		// 제네릭은 타입의 명시화이다.
		ArrayList<Integer> nums = new ArrayList<Integer>();
		// 변수에 선언과 동시에 초기화 --> 값이 들어가 있는 상태인가?
		// 값을 동시에 추가하고 싶다면
		ArrayList<Integer> num2 = new ArrayList<>(Arrays.asList(1,2,3,4,5)); 
		
		ArrayList<String> vocabulary = new ArrayList<String>();
		ArrayList<Node> members = new ArrayList<>();
		
		// 클래스의 정의된 기능을 알아 봐야 한다.
		// 값 추가 방법
		list.add(3);
		list.add(null);
		list.add(1, 10); // index 1위치에 요소 10을 삽입, 기존 요소 있었다면 뒤로 자용 이동
		System.out.println("값 추가 확인 : " + list);
		Node node = new Node("홍박사");
		System.out.println(node);
		
		// 값 삭제
		list.remove(2); // index 2번째 요소 삭제
		System.out.println("값 삭제 확인 : " + list);
		
		// 전체 삭제
		//list.clear();
		System.out.println("전체 삭제 확인 " + list);
		
		// 리스트 사이즈 확인 (요소의 갯수, 사이즈 개념)
		System.out.println(list.size());
		
		// 하나의 요소를 꺼내는 방법
		try {
			System.out.println(list.get(0));
				
		} catch(Exception e) {
			System.out.println("프로그램이 종료 되지 않게 처리");
		}
		
		// ArrayLlist 와 반복문에 활용
		nums = list; // 복사 개념 필!!!!!! 얕은 복사 개념!!!!!!
		System.out.println(list);
		System.out.println("--------------");
		list.add(10000);
		System.out.println(nums);

		// for(Integer i: list) {} <- list 는 컴파일 시점에 object 타입으로 인식

		for(Integer i: nums) {
			System.out.println("i : " + i);
		}
		
		// ArrayList 안에 값이 포함 되어 있는가 확인
		System.out.println("3이 nums 리스트에 존재 하는가?" + nums.contains(3)); // 3이라는 실제 값을 넣어줌
		System.out.println("3이 nums 리스트에 존재 하는가?" + nums.contains(500));
		
		// 요소의 위치(index) 확인
		System.out.println("요소 3이 몇 번째 인덱스에 위치 하니 -> " +  nums.indexOf(3));
		System.out.println("요소 10이 몇 번째 인덱스에 위치 하니 -> " +  nums.indexOf(10));
		System.out.println("요소 500이 몇 번째 인덱스에 위치 하니 -> " +  nums.indexOf(500));
		
		
		// Iterator 요소 순회 (반복자)
		Iterator<Integer> iter = nums.iterator();
		while(iter.hasNext()) {
			System.out.println("while 을 활용하는 방법 : " + iter.next());
		}
		
		// 배열, ArrayList // 검색이 빠른 -> 배열 

	}// end of main

}// end of class

실행 결과_______

 

'JAVA > Java 기초' 카테고리의 다른 글

[JAVA] 표준 입출력  (0) 2024.05.16
[JAVA] Map 인터페이스  (0) 2024.05.16
[JAVA] 자바 I/O 개론  (0) 2024.05.16
[JAVA] LinkedList  (0) 2024.05.08
[JAVA] 큐(Queue)  (0) 2024.05.07

관련글 더보기