기록하는 개발자

자바 #4 컬렉션 본문

JAVA

자바 #4 컬렉션

밍맹030 2020. 1. 5. 14:32
728x90

컬렉션

컬렉션 : 요소 객체들의 저장소로 요소의 개수에 따라 크기가 자동으로 조절 된다.

제네릭 :특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법

 

컬렉션과 제네릭

-컬렉션은 제네릭 기법으로 구현됨

-컬렉션의 요소는 객체만 가능

 

E Element를 의미하며 컬렉션에서 요소를 표시할 때 많이 사용한다.
T Type을 의미한다.
V Value를 의미한다.
K

Key를 의미한다.

Ex) void push(E element)

-->클래스 생성 시에 파라미터의 자료형을 E라고 써 두고 이를 사용시 오버라이딩 할 때 아래와 같이 특정 타입으로 구체화 시킨다.

-void push(Integer element)

-void push(String element

 

Vector<E> 

특성

-배열의 길이 제한을 극복하고 원소의 개수가 넘쳐나면 자동으로 길이 조절

-vector에 삽입 가능한 것 : 객체, null, 기본 타입은 Wrapper 객체로 만들어 저장

-vector에 객체 삽입 : 벡터의 맨 뒤나 중간에 객체 삽입

-vector에서 객체 삭제 : 임의의 위치에 있는 객체 삭제 가능

 

Integer 타입의 Vector 컬렉션 내부 모습

벡터의 인덱스 3에 10이 들어가 있는 것이 아니라 세 번째 인덱스가 10이라는 Integer wrapper 객체를 가리키는 것이다.

 

Vector v=new Vector(); //ERROR

-->vector<integer> 로 타입 매개 변수 사용을 안하고 벡터로만 사용하면 경고 발생

 

v.add(5); -->요소 5 삽입

v.add(2,100); -->요소 100을 인덱스 2에 넣고 그 뒤에 거 밀어서 하기

 

 

*자동 박싱, 언박싱이 작동하여 기본 타입 값 사용 가능

Vector<Integer> v = new Vector<Integer> ();

v.add(4); // 4  Integer.valueOf(4)로 자동 박싱

int k = v.get(0); // Integer 타입이 int 타입으로 자동 언박싱, k = 4

 

*제네릭 타입 매개 변수를 기본 타입으로 구체화할 수는 없음 

Vector<int> v = new Vector<int> (); // 오류  -->반드시 wrapper(객체)형으로 선언

 

*컬렉션을 매개변수로 받는 메소드의 원형

// Integer 벡터를 매개변수로 받아 원소를 모두 출력하는 printVector() 메소드

public void printVector(Vector<Integer> v) {

             for(int i=0; i<v.size(); i++) {

                           int n = v.get(i); // 벡터의 i 번째 정수

                           System.out.println(n);

             }

}

Vector<Integer> v = new Vector<Integer>(); // Integer 벡터 생성

printVector(v); // 메소드 호출

-java 10 이후 var 키워드 도입, 컴파일러의 지역 변수 타입 추론 가능

Var v=new Vector<Integer>(); //Var로 지정해야만 가능

 

ArrayList<E>

 특성

-삽입 가능한 것 : 객체, null, 기본 타입은 박싱/언박싱으로 Wrapper객체로 만들어 저장

-객체 삽입/삭제 : 리스트의 맨 뒤, 중간에 삽입 / 임의의 위치에 있는 객체 삭제 가능

-벡터와는 달리 스레드 동기화 기능 없음 : 개발자가 스레드 동기화 코드 작성

 

String 타입의 ArrayList 컬렉션 내부 모습

 

ArrayList 컬렉션의 메소드

ex)

a.add(“Hello”);  -->문자열 hello 삽입

a.add(2, “hi”);  -->인덱스 두 번째에 hi 삽입

 

*제한된 길이 초과 시에 벡터는 배열의 크기 100%가 증가, arraylist 는 50% 증가

Iterator< E> 인터페이스

-컬렉션의 순차 검색을 위한 인터페이스

Iterator 인터페이스의 주요 메소드

Iterator() 메소드 : Iterator 객체 반환

--> iterator 객체를 이용하여 인덱스 없이 순차적 검색 가능

Vector<Integer> v = new Vector<Integer>(); //객체생성

Iterator<Integer> it = v.iterator();      //

while(it.hasNext()) { // 모든 요소 방문

             int n = it.next(); // 다음 요소 리턴

             ...

}

 

HashMap<K,V>

-키와 값의 쌍으로 구성되는 요소를 다루는 컬렉션

-값 검색을 위해 반드시 키를 이용

-삽입 삭제 검색이 빠른 특징 --> 요소 삽입 : map.put() / 삭제 : map.get()

 

HashMap<String, Phone> map= new HashMap <String, Phone>();

-->String을 key 값으로 쓰고 Phone을 value 로 사용하는 해시 맵

 

HashMap 컬렉션의 메소드

-Arraylist나 Vector 에 집어 넣으면 삽입 순서 그대로 삽입 됨

-HashMap은 key에 의한 해시 함수로 순서 지켜지지 않음

 

LinkedList <E> 

-java.util.LinkedList

-List 인터페이스를 구현한 컬렉션 클래스

-Vector, ArrayList 클래스와 매우 유사하게 작동

-요소 객체들은 양방향으로 연결되어 관리됨

-요소 객체는 맨 앞, 맨 뒤에 추가 가능

-요소 객체는 인덱스를 이용하여 중간에 삽입 가능

-맨 앞이나 맨 뒤에 요소를 추가하거나 삭제할 수 있어 스택이나 큐로 사용 가능

 

 

제네릭 클래스 : type 을 그때그때 쓸 때마다 필요한 타입으로 쓸 수 있도록 클래스를 정의하는 것


EX)
Phone<T>p=new Phone<T>

--> Phone<Integer>p=new Phone<Integer>

-->Phone<String>p=new Phone<String>

 

 

728x90

'JAVA' 카테고리의 다른 글

자바 #6 이벤트 처리  (0) 2020.01.05
자바 #5 JAVA GUI  (0) 2020.01.05
자바 #3 모듈과 패키지  (0) 2020.01.04
자바 #2 인터페이스  (0) 2020.01.04
자바 #1 상속  (0) 2020.01.04