상세 컨텐츠

본문 제목

자바 컬렉션 프레임워크 List<E>

JAVA

by 빙하둘리 2022. 12. 19. 15:02

본문

728x90

인스턴스 참조 삭제 저장 등을 모아둔게 컬렉션 프레임워크

인스턴스 참조 삭제 저장을 위해 클래스를  활용한 것

프레임워크 자료구조와 관련이 있음

 

각 방법에 따라 서로 다른 클래스 저장 방법을 쓴다.

 

 

컬렉션 프레임워크-인터페이스를 일단 정의

인스턴스 저장 삭제 참조하는 기능을 갖고 있는 클래스들은 Set, List, Queue 중 하나를 구현하게 되어있다.

 

List<E> 인터페이스를 구현하는 컬렉션 클래스들 (인터페이스와 컬렉션 클래스 모두 제네릭 형태를 띄고 있다.)

LinkedList<E>는 연결 리스트 기반

자료구조 Linked가 무엇인지 코드 레벨에서 본다. 어떤 식으로 LinkedList가 구현되었는지

 

List는 순서 신경 덜 쓸 수 있어.

데이터 단순 저장은 배열이 더 빠르다. 근데 지우고 다시 앞으로 당기고 해야되는 단점이 있다. 그런데 List는 그렇지 않아도 된다.

 

ArrayList나 LinkedList나 둘 다 List 인터페이스를 구현한다.

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

List관점에서, List 인터페이스가 가지고 있는 기능들만 활용하겠다.

List 인터페이스가 가지고 있는 대표적인 메서드들 add remove 등등

 

3개의 스트링 인스턴스 저장하니 list.size()는 3을 반환

저장 시 나란히 저장

 

배열-삭제 시 밀착-삭제 후에 뒤에 있는 친구들을 땡긴다. 즉, 인덱스를 바꿔야 해.

 

 

List 인터페이스를 구현하는 LinkedList<E> 클래스

연결 자료구조 링크드 리스트에서 삭제

 

ArrayList와 LinkedList 장단점 정리

링크드 리스트는 50개 중 25번째 데이터를 참고하려면 앞이나 뒤에서 부터 계속 건너가야된다.

반면 배열은 인덱스 참조로 끝

 

 

LinkedList 같은 컬렉션 클래스에 저장된 인스턴스들을 순차적으로 참고하는 방법

 

for each문=enhanced for문

컬렉션을 대상으로 enhanced for문도 가능

 

첫번째 인스턴스의 참조값이 s에 전달되고, 두번째 인스턴스의 참조값이 s에 전달되는 식으로 enhanced for문

 

반복자 있으면 어떤 대상이든 동일한 패턴으로 요소에 접근 가능

 

next 메서드만 호출하면 하나씩 꺼내준다. 그렇게 착한 애가 '반복자'

누구든지 순차적인 참고 가능 by 반복자

 

hasNext()는 반환할 대상이 있는지 확인

있으면 True 반환

 

iterator의 반복자를 참조할 수 있는 참조형은 다음과 같다.

다음 문장에서

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

LinkedList가 저장하고 있는 인스턴스가 String 인스턴스다.

 

반복자를 얻을 때는 참조형을

Iterator<String> list = list.iterator();

Iterator<String>으로 해줘야 된다.

 

반복자의 대표적인 함수 next hasnext remove 함수 이렇게 3개

 

 

대상이 누구든 반복자를 기반으로 인스턴스를 하나씩 꺼내서 참조하는 거는 동일하다.

hasnext? 있으면 next 줘

 

next 반복자의 지팡이를 다음으로 옮겨주는 의미가 있다.

즉, next라 호출되는 순간 지팡이를 다음으로 옮겨준다.

그리고 얘의 참조값을 우리에게 전달해준다.

 

remove는 remove를 호출하는 시점에, 즉 현재 가리키는 대상을 삭제해버린다.

위에서는 remove 호출 시 Box를 가리키는 상태니, Box가 삭제된다.

 

결론

링크드리스트는 자기가 알아서 size를 늘렸다 줄였다 해준다.

 

배열) 생성과 동시에 원하는 값 저장 가능 (인덱스 접근으로)

그러나 LinkedList는 그렇게 하기는 좀 복잡하다.

 

해결책으로 다음과 같

List<String> list=Arrays.asList("Toy", "Robot", "Box");

Arrays클래스의 static 메서드인 asList를 갖다가 자바에서 제공해준다.

역할은 collection 인스턴스 생성하고 add 메서드 호출해서 하나씩 넣어주는 것을 위의 한 문장으로 해결!

 

배열 기반 컬렉션 인스턴스를 만들어서 반환하는데 인자인 토이부터 박스를 담아서 반환해준다.

근데 변경 불가능한(저장된 것을 빼지도 더하지도 못하는) Immutable 인스턴스다.

 

해결책은? 다음에 설명

 

컬렉션 인스턴스의 참조값을 인자로 받는 게 있다.

컬렉션 인터페이스가 모든 컬렉션 인터페이스의 최상위 인터페이스니까

즉, 컬렉션 인터페이스를 구현한 컬렉션 인스턴스를 인자로 전달할 수 있다.

중복 저장 가능

<? extedns E> 꺼내는 것만 가능해

원래 immutable이어서 안되긴 하는데

 

제너릭이랑 와일드카드 부분 복습하고 돌아오기!

728x90

'JAVA' 카테고리의 다른 글

[Java] Set<E> 클래스  (0) 2022.12.20
배열 기반 리스트, 연결 기반 리스트 마무리  (0) 2022.12.20
제네릭 심화 문법 마무리  (0) 2022.12.19
자바는 문자열의 끝을 표시하나요?  (0) 2022.12.18
제네릭  (0) 2022.11.22

관련글 더보기

댓글 영역