- [자료 구조] 8. List 인터페이스2024년 05월 09일
- Song hyun
- 작성자
- 2024.05.09.:18
728x90반응형[자료 구조] 8. List 인터페이스
1. List 인터페이스란?
2. List 인터페이스의 주요 메서드
3. List 인터페이스 구현체
4. 예제
1. List 인터페이스란?
(1) List 인터페이스의 개념
-> 자바에서 객체를 순서대로 저장하고, 관리할 수 있도록 설계된 인터페이스이다.
->자바의 java.util 패키지에 속하며, 배열이나 연결 리스트 등의 순차적 자료 구조의 구현체를 위한 메서드를 정의한다.
(2) List 인터페이스의 특징
(2-1) 순서 유지:
(2-2) 중복 허용: List는 같은 값을 가진 원소의 중복 저장을 허용한다. 예를 들어, 같은 값을 여러번 리스트에
(2-3) 가변 크기: List 의 구현체들은 동적으로 크기가 조절된다. (<->배열) 즉, 원소를 추가하거나 제거함에 따라, 리스트의 크기가 자동으로 조정된다.
2. List 인터페이스의 주요 메서드
(1) add(E element) :
(2) get(int index) :
(3) remove(int index) :
(4) indexOf (Object o) : 지정된 객체가 처음으로 나타나는 위치의 인덱스를 반환한다. 객체가 리스트에 포함되지 않은 경우, -을 반환한다.
(5) size() : 리스트에 있는 원소의 수를 반환한다.
3. List 인터페이스 구현체
(1) Collection :
(2) List : 내부적으로 배열을 사용하여 요소를 관리하는 List 구현체이다. 요소를 무작위 접근이 빠르다는 장점이 있다.
(3) ArrayList : 내부적으로 배열을 사용하여, 요소를 관리하는 List 구현체이다. 요소의 무작위 접근이 빠르다는 장점이 있다.
(4) LinkedList : 내부적으로 연결 리스트를 사용하여 요소를 관리하는 List 구현체이다. 요소의 삽입과 삭제가 빠르다,
(5) Vector : ArrayList와 유사하지만, 모든 메서드가 동기화되어 있어, 멀티 스레드 환경에서 안전하게 사용할 수 있다.
*제네릭(<>): 제네릭은 타입의 명시화이다.
아래의 예제를 통해 얕은 복사와 깊은 복사의 개념에 대해 알아보자.
*얕은 복사(Shallow Copy): 원본 객체의 데이터가 아닌, 원본 객체의 주소값을 복사하는 것이 얕은 복사이다.
즉, 새로운 복사본이 하나 생기는 것이 아니라, 복사본은 원본 객체의 주소값을 가리키는 것이기에, 객체의 수는 그대로이다. (=인터넷 아이콘의 '바로가기'와 유사하다!) 얕은 복사를 한 객체의 값을 수정하면, 원본 객체의 값이 함께 수정된다.
** 깊은 복사(Deep Copy): 원본 객체의 데이터를 그대로 복사한다. 즉 주소값을 복사하는 것이 아닌, 데이터 그 자체를 그대로를 복사하는 것이기에 객체의 수는 2가 된다. 깊은 복사를 할 시, 복사본을 수정해도 원본에는 변함이 없다.
package Structure.ch05; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import basic.ch05.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); // 리스트에 3 삽입 list.add(null); // 리스트에 null 삽입 list.add(1,10); // = 1번째 인덱스에 10을 넣어라. // 기존 요소가 있다면 뒤로 자동 이동 System.out.println("값 추가 확인 : "+list); // 참조 변수에는 주소값(4바이트)이 포함된다. // 하지만 List의 값을 호출시, 주소값이 아닌 데이터가 호출된다. // 이는 toString이 오버라이딩 되어있기 때문. // 값 삭제 list.remove(2); // 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; // 복사 개념 (list는 int형 정수를 받는다.) // 복사 개념 필수!!!! 얕은 복사 개념! System.out.println(list); System.out.println("------------"); list.add(1000); 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()); } } // end of main }
728x90반응형'자료 구조 > 기본 개념' 카테고리의 다른 글
[자료 구조] 10. Set 인터페이스 (0) 2024.05.10 [자료 구조] 9. List 인터페이스 활용 : 영화 평점 관리 시스템 예제 만들기 (0) 2024.05.09 [자료 구조] 7. 컬렉션 프레임 워크 (0) 2024.05.09 [자료 구조] 6. 연결 리스트 (0) 2024.05.08 [자료 구조] 6. 큐 구현하기 (0) 2024.05.07 다음글이전글이전 글이 없습니다.댓글