[Java] 어서와! 자료구조 알고리즘은 처음이지? 파트 2-2

창진·2022년 10월 10일
0

리스트(List)

List<Generic> list = new LinkedList<>()

위의 코드로 리스트를 선언해줍니다 <> 안에는 Generic 타입이 들어가야 합니다.

제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것입니다.

그렇기 때문에 primitive 타입은 지정할수 없습니다. 사용하고 싶다면 primitive 타입을 reference class 로 변환하여 사용하면 됩니다 ex) int -> Integer

리스트는 선형적으로 이루어진 자료 구조이기 때문에 순서가 매우 중요합니다.

값을 추가할때

list.add("1");
list.add("2");
list.add("3");

add 를 사용하여 추가해주시면 됩니다. 그러면 출력할때 [1,2,3] 으로 출력됩니다.

자주 사용하는 코드

add(int index, 요소) -중간에 element를 추가하고 싶을 때
remove(int index) - index를 이용해 element를 지우고 싶을 때
get(int index) - 하나의 값만 꺼내고 싶을때
isEmpty() - 리스트 안에 값이 있는지 없는지 판별 할 때 Boolean 값으로 출력
size() - 리스트의 크기를 알고 싶을 때

그외의 코드는 링크텍스트 을 참고하시면 됩니다
.

List Interface

Linkedlist 는 List Interface를 implement 합니다. 그러므로 꼭 Linkedlist 가 아니어도 Ventor 을 사용해서 구현할 수도 있습니다.
여기서 vector 형을 사용하더라고 List Interface를 Implement 하므로 List 형으로도 표현할 수 있습니다. 이러한 경우를 형이 많다 다형성이라고 말하기도 합니다.

List Interface 를 Implement 하는 객체들

Linkedlist

-내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하려는 원소에 따라 처음부터 정방향 또는 역순으로 순회 가능합니다.

-LinkedList는 순차적 접근이기 때문에 검색의 속도가 느립니다.

arraylist

-필요에 따라서 array size를 늘릴 수 있습니다. element를 추가하게 되면 크기가 더 큰 array를 만들어서 기존에 있는 값들을 복사한 다음 그전에 array를 지우는 방식으로 작동합니다. 이러한 기능을 내부에서 구현합니다.

-탐색속도가 빠릅니다.

-ArrayList(int initialCapacity) initial Capacity를 미리 지정해 어느 정도 크기를 정해두고 초과하였으면 크기를 늘리는 방식으로 활용할 수 있습니다.

-is not synchronized.

-ArrayList는 동기화 되지않았기 때문에 동기화 된 벡터보다 더 빠릅니다.

vector

-앞서말한 array list와 일치합니다

-synchronized.

동기화(Synchronize)Vector가 동기화 된다면 ArrayList는 동기화가 되지않은 상태입니다.쉽게말해 Vector는 한번에 하나의 스레드만 엑세스(접근) 가능하며, ArrayList는 동시에 여러 스레드가 작업할 수 있습니다.ArrayList에서 여러 스레드가 동시에 엑세스하는 경우 개발자가 명시적으로 동기화하는 코드를 추가해야합니다.

profile
안녕하세요

0개의 댓글