제네릭과 컬렉션
제네릭
- 다양한 타입의 객체를 동일한 코드로 처리하는 기법
- 제네릭은 컬렉션 라이브러리에 많이 사용됨.
- 타입 매개변수(Type Parameter)를 이용하여 인스턴스 정의 시 개발자에 의해 선언됨.
public class Box<T> { // T는 타입을 의미!
private T data;
public void set(T data) {this.data=data;}
public T get() { return data;}
}
Box<String> b = new Box<String>();
제네릭 타입 매개 변수의 표기
E | Element(요소 : 자바 컬렉션 라이브러리에서 많이 사용됨.) |
K | Key |
N | Number |
T | Type |
V | Value |
S,U,V | 2번째,3번째,4번째 타입 |
제네릭 타입 매개 변수 예시
public interface Pair<K,V> {
public K getKey();
public V getValue();
}
class OrderedPair<K,V> implements Pair<K, V>{
private K key;
private V value;
public OrderedPair(K key,V value) {
// TODO Auto-generated constructor stub
this.key=key;
this.value=value;
}
@Override
public K getKey() {
// TODO Auto-generated method stub
return key;
}
@Override
public V getValue() {
// TODO Auto-generated method stub
return value;
}
}
타입매개변수가 2개인 (<K,V>) 인터페이스를 정의했다.
K는 key의 타입이고, V는 value의 타입이다.
컬렉션
- 컬렉션(Collection)은 자바에서 자료 구조를 구현한 클래스이다.
- 자료구조로는 리스트,스택,큐,집합,해쉬 테이블 등이 있다.
- List,Stack,Queue,Set,Hash Table
컬렉션 VS 배열
컬렉션
- 가변 크기로 객체를 관리
- 컬렉션 내의 객체 추가,삭제 시 자동으로 처리한다.
배열
- 고정 크기 이상의 객체를 관리할수 없음.
- 배열의 중간에 객체가 추가,삭제되면 응용 프로그램에서 자리를 이동하는 연산이 필요하다.
컬렉션 인터페이스 메소드
메소드 | 설명 |
int size() | 원소의 개수 반환 |
boolean isEmpty() | 공백상태일시 True 반환 |
boolean contains(Object obj) | obj를 포함시 True 반환 |
boolean add(E element) | 원소 추가 |
boolean remove(Object obj) | 원소 삭제 |
Iterator<E> iterator() | 원소 방문 |
ArrayList는 타입 매개변수를 가지는 제네릭 클래스로 제공한다.
ArrayList<String> a = new ArrayList<String>(10);
- 데이터 추가시
a.add("대충");
a.add("벌레");
- 데이터 개수 확인
int b = a.size();
b의 값은 2가된다.
- 데이터 삽입
a.add(1,"하는");
두번째 자리에 데이터를 추가하게 된다.
즉 {"대충","하는","벌레"} 가 된다.
- 데이터 접근
String blog = a.get(0);
blog변수에는 "대충"이라는 값이 들어간다.
- 데이터 삭제
a.remove(1);
두번째 자리에 있는 즉 아까전에 삽입했던자리의 데이터를 삭제한다.
- ArrayList 내용 삭제
a.clear();
a의 모든 요소를 삭제한다.
ArrayList 예시와 연산
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> list = new ArrayList<String>(); //String 타입의 객체를 저장할 수 있는 ArrayList 객체 생성
list.add("대충");
list.add("벌레");
list.add("블로그");
list.add("입니다.");
list.add(1,"하는"); //인덱스 번호 1에 "하는"을 삽입합니다.
list.set(1,"하지않는"); // 인덱스 번호1의 원소를 "하지않는"으로 대체합니다.
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
- ArrayList는 중복 데이터도 가능합니다(Set은 불가)
- 검색 시 왼쪽 or 오른쪽에서 처음 검색되는 데이터 인덱스 반환할수 있다.
int index=list.indexOf("대충");
int index2=list.lastIndexOf("블로그");
index의 값은 0이 들어갈 것이며
index2의 값은 3이 들어갈것이다.
그외
hasNext() : 아직 원소가 남아있으면 True 반환
next() : 다음 원소를 반환
remove() : 최근에 반환된 원소 삭제
관련글
1.2019/10/22 - [IT/Java] - Java 공부 정리 [1]
2.2019/10/23 - [IT/Java] - Java 공부 정리 [2] - 상속
3.2019/10/24 - [IT/Java] - Java 공부 정리 [3] - 상속(2)
4.2019/11/08 - [IT/Java] - Java 공부 정리[4] - 배열
5.2020/01/08 - [IT/Java] - Java 공부 정리[5] - 추상,인터페이스
6.2020/01/08 - [IT/Java] - Java 공부 정리[6] - 예외 처리 (Exception)
공감,구독 부탁드립니다.
'IT 기술 > 자바[Java]' 카테고리의 다른 글
JDK 1.8 설치하는 방법 [2020.08.31] (2) | 2020.08.31 |
---|---|
Java 공부 정리 [9] - 네트워크 (0) | 2020.01.16 |
Java 공부 정리[6] - 예외 처리 (Exception) (0) | 2020.01.09 |
Java 공부 정리[5] - 추상,인터페이스 (0) | 2020.01.08 |
Java 공부 정리[4] - 배열 (0) | 2019.11.08 |