- List 인터페이스2024년 09월 15일
- tjdudtn
- 작성자
- 2024.09.15.:20
자바에서 객체를 순서대로 저장하고 관리할 수 있도록 설계된 인터페이스입니다.
자바의 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**와 유사하지만, 모든 메서드가 동기화되어 있어 멀티 스레드 환경에서 안전하게 사용할 수 있습니다.
package structure.ch05; 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까지의 평점을 줄 수 있으며, 평점이 높은 영화부터 낮은 순으로 정렬하여 보여줍니다.
package structure.ch05; 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]
'Data Structure( 자료구조 ) > 컬렉션 프레임워크' 카테고리의 다른 글
Map 인터페이스 (0) 2024.09.15 Set 인터페이스 (0) 2024.09.15 컬렉션 프레임워크(collection framework)란? (0) 2024.09.15 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)