일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- React JS
- 백준
- NextJS
- 코틀린
- useEffect
- 디자인 패턴
- react firebase
- 데이터모델링과마이닝
- Java
- 자바스크립트
- 프로그래밍 언어론
- 리액트 훅
- 코딩테스트 고득점 Kit 완전탐색
- 프로그래머스 자바
- 컴퓨터 네트워크
- useState
- JavaScript
- 장고
- react hook
- 리액트
- 프로그래머스
- 코딩테스트 고득점 Kit
- design pattern
- codesandbox
- 자바
- 프로그래머스 완전탐색
- 자바 공부
- vanillaJS
- websocket
- react
- Today
- Total
기록하는 개발자
자바 #4 컬렉션 본문
컬렉션
컬렉션 : 요소 객체들의 저장소로 요소의 개수에 따라 크기가 자동으로 조절 된다.
제네릭 :특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법
컬렉션과 제네릭
-컬렉션은 제네릭 기법으로 구현됨
-컬렉션의 요소는 객체만 가능
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에서 객체 삭제 : 임의의 위치에 있는 객체 삭제 가능
벡터의 인덱스 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객체로 만들어 저장
-객체 삽입/삭제 : 리스트의 맨 뒤, 중간에 삽입 / 임의의 위치에 있는 객체 삭제 가능
-벡터와는 달리 스레드 동기화 기능 없음 : 개발자가 스레드 동기화 코드 작성
ex)
a.add(“Hello”); -->문자열 hello 삽입
a.add(2, “hi”); -->인덱스 두 번째에 hi 삽입
*제한된 길이 초과 시에 벡터는 배열의 크기 100%가 증가, arraylist 는 50% 증가
Iterator< E> 인터페이스
-컬렉션의 순차 검색을 위한 인터페이스
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 로 사용하는 해시 맵 |
-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>
'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 |