본문 바로가기
Java/Data Structure(자료구조)

List 인터페이스

by 개발자공부 2024. 5. 24.

컬렉션 프레임워크(collection framwork)

자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 

즉 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다. 이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현된다.

 

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

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

● 개발에 소요되는 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있다.

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


List 인터페이스

자바에서 객체를 순서대로 저장하고 관리할 수 있도록 설계된 인터페이스이다.

자바의 java.util 패키지에 속하며, 배열이나 연결 리스트 등의 순차적 자료 구조의 구현체를 위한 메서드를 정의한다.

 

List 인터페이스의 주요 특징

 순서 유지 : List 인터페이스를 구현하는 자료 구조는 원소들이 삽입된 순서를 유지한다. 이는 원소들이 리스트 내에서 특정 위치(index)를 가지며, 이 인덱스를 통해 접근할 수 있다는 것을 의미한다.

 중복 허용 : List는 같은 값을 가진 원소의 중복 저장을 허용한다. 예를 들어, 같은 값을 여러번 리스트에 추가할 수 있으며, 이는 리스트의 크기를 증가시키고 각각의 원소는 별도의 인덱스를 갖게 된다.

● 가변 크기 : List의 구현체들은 동적으로 크기가 조절된다. 즉, 원소를 추가하거나 제거함에 따라 리스트의 크기가 자동으로 조정된다.

 

주요 메서드

add(E element) : 리스트의 끝에 원소를 추가한다.

get(int index) : 지정된 위치의 원소를 반환한다.

remove(int index) : 지정된 위치의 원소를 제거하고 그 원소를 반환한다.

indexOf(Object o) : 지정된 객체가 처음으로 나타나는 위치의 인덱스를 반환한다. 객체가 리스트에 포함되어 있지 않은 경우 -1을 반환한다.

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

 

List 인터페이스 구현체

Collection
   |
   └── List
        ├── ArrayList
        ├── LinkedList
        └── Vector
        ├ .....

 Collection : 모든 컬렉션 클래스의 최상위 인터페이스이다.

 List : Collection 인터페이스를 확장하는 순서가 있는 컬렉션을 위한 인터페이스이다. 리스트는 중복을 허용하며, 각 요소가 삽입된 순서에 따라 인덱스로 접근할 수 있다.

 ArrayList : 내부적으로 배열을 사용하여 요소를 관리하는 List 구현체이다. 요소의 무작위 접근이 빠르다는 장점이 있다.

 LinkedList : 내부적으로 연결 리스트를 사용하여 요소를 관리하는 List 구현체이다. 요소의 삽입과 삭제가 빠르다는 장점이 있다. 

 Vector : ArrayList와 유사하지만 모든 메서드가 동기화되어 있어 멀티 스레드 환경에서 안전하게 사용할 수 있다.

더보기
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import basic.ch22.Student;

public class MyArrayListTest {

	// 메인 쓰레드
	public static void main(String[] args) {

		List mList; // 리스트 인터페이스 계열

		// ArrayList 클래스의 인스턴스화 처리
		ArrayList list = new ArrayList();
		// 제네릭은 추후 더 설명
		// 제네릭은 타입의 명시화이다.
		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<Student> members = new ArrayList<>();

		// 클래스의 정의된 기능을 알아 봐야 한다.
		// 값 추가 방법
		list.add(3);
		list.add(null);
		list.add(1, 10); // indx 1위치에 요소 10을 삽입, 기존 요소 있었다면 뒤로 자동 이동
		System.out.println("값 추가 확인 : " + list);
		Student student = new Student("홍박사");
		System.out.println(student);

		// 값 삭제
		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("프로그램이 종료 되지 않게 처리");
		}

		// ArrayList 와 반복문에 활용
		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));
		System.out.println("500이 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

 

도전 문제

영화 평점 관리 시스템

상황 설명 : 사용자가 영화에 평점을 주고, 평점에 따라 영화 추천 목록을 관리하는 시스템이다. 사용자는 영화에 1부터 5까지의 평점을 줄 수 있으며, 평점이 높은 영화부터 낮은 순으로 정렬하여 보여준다.

더보기
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class MovieRationgSystem {

	
	public static void main(String[] args) {
		// Movie Object 계속 추가하는 자료구조
		ArrayList<Movie> movies = new ArrayList<Movie>();
		movies.add(new Movie("범죄도시 4", 5));
		movies.add(new Movie("기생충", 4));
		movies.add(new Movie("올드보이", 5));
		movies.add(new Movie("인생은아름다워", 3));
		
		System.out.println(movies);
		
		for (Movie movie : movies) {
			System.out.println(movie.getTitle());
		}
		System.out.println("--------------------------");
		for (int i = 0; i < movies.size(); i++) {
			// 배열이 아님 --> get() 메서드 사용 
			System.out.println(movies.get(i).getTitle()); 
		}
		
		// 어떤 데이터를 정렬을 하려면 정렬 알고리즘을 구현해서 기능을 만들어 주면 된다. 
		// 버블 정렬, 퀵, 선택 가능 .... 
		// 자바 표준 API 사용 
		Collections.sort(movies, new Comparator<Movie>() {
			@Override
			public int compare(Movie m1, Movie m2) {
				return Integer.compare(m2.getRating(), m1.getRating());
			}
		});
		System.out.println("-------------------------------------------");
		// 평점 순으로 정렬된 영화 목록 출력 
		for (Movie movie : movies) {
			System.out.println(movie);
		}
		
	} // end of main 

} // end of class 

class Movie {
	
	private String title; 
	private int rating; 
	
	public Movie(String title, int rating) {
		this.title = title; 
		this.rating = rating;
	}
	
	public String getTitle() {
		return title;
	}

	public int getRating() {
		return rating;
	}

	@Override
	public String toString() {
		return "Movie [title=" + title + ", rating=" + rating + "]";
	}	
}

 

--------------------------
범죄도시 4
기생충
올드보이
인생은아름다워
-------------------------------------------
Movie [title=범죄도시 4, rating=5]
Movie [title=올드보이, rating=5]
Movie [title=기생충, rating=4]
Movie [title=인생은아름다워, rating=3]

 

'Java > Data Structure(자료구조)' 카테고리의 다른 글

Set 인터페이스  (0) 2024.05.24
LinkedList 구현  (0) 2024.05.24
Queue 큐 구현하기  (1) 2024.05.24
배열로 Stack 구현하기  (0) 2024.05.24
배열로 객체 만들기  (0) 2024.05.24