JAVA 제네릭 타입 컬렉션 클래스
배열 데이터의 삽입/삭제 용이, 동적 할당 용이를 위해 제네릭 타입 컬렉션 클래스 사용
제네릭 : 자료형의 일반화 <T>, 제네릭 타입에 객체만 넣을 수 있다, 엄격한 타입 checking
컬렉션 : 자료구조, 기본 자료형은 wrapper 클래스 사용, 제네릭 기법으로 구현
하나의 클래스를 만들어서 여러 자료형의 배열을 만들고 싶다면 제네릭 클래스로 멤버 추가
제네릭 클래스의 객체가 생성될 때 자료형이 지정되고, 생성 뒤에는 해당 자료형만 담을 수 있음
Iterator <E>: 반복자 객체, 컬렉션에서 요소의 순차 검색을 위한 인터페이스
- 모든 컬렉션은 Iterator를 통해 순차적으로 반복자 객체를 얻을 수 있다.
Vector<Integer> v = new Vector<Integer>();
Iterator<Integer> it = v.iterator(); // 반복자 객체 얻기
while(it.hasNext()){
int n = it.next(); // 모든 요소 방문해 다음 요소 리턴
}
List <E> 인터페이스 : ArrayList <E> 동기화 불가능, Vetor <E> 동기화 가능
-가변적 길이의 배열 객체 생성
-객체들의 삽입/삭제/검색 메서드 제공
add()를 이용하여 요소를 삽입
get()을 이용하여 요소를 검색
Vector <Integer> v = new Vector <Integer>(7); 용량이 7인 벡터
int n = v.size(); 요소 개수 반환
int c= v.capacity(); 용량 반환
v.add(2,100); 요소 중간에 삽입
Integer obj = v.get(1); 인덱스 1번 요소 객체 얻기
int i = obj.intValue(); 값 얻기
v.remove(1); 요소 삭제
Set <E> 인터페이스 : HashSet <E> 집합 (저장 순서 유지 X, 중복 허용 X)
-정렬 순서 기준 X, 반복 기준 X
-hashCode()로 해시값을 계산한다, equals()로 같은 부류에서 확인한다.
-객체를 전달받을 때 값이 같은지 비교하기 위해서 hasCode(), equals()를 재정의한다
Map <K, V> 인터페이스 : HashMap <K, V> 파이썬의 딕셔너리와 비슷
Arraylist와 Vetor는 순서를 지정해 가변적인 배열처럼 사용한다.
HashSet, HashMap은 순서를 지정 X, 반복자 객체를 통해 접근하고, 해쉬 코드와 equal 재정의한다.
<Iterator 반복자>
public class IteratorUsage{
ArrayList<String> list = new ArrayList<String>();
list.add("First");
list.add("Second");
list.add("Third");
list.add("Fourth");
Iterator<String> itr = list.iterator();
System.out.println("삭제 전");
while(itr.hasNext()){
String current = itr.next();
System.out.println(current);
if(current.compareTo("Third") == 0)
itr.remove();
}
itr = list.iterator();
System.out.println("삭제 후");
while(itr.hasNext())
System.out.println(itr.next());
}
}
<HashSet 재정의>
public class HashCode{
int num;
HashCode(int n){
num = n;
}
public String toString(){
return String.valueOf(num);
}
@Override
public int hashCode(){
return (num%3);
}
@Override
public boolean equals(Object obj){
if(obj != null && obj instanceof HashCode){
HashCode hash = (HashCode)obj;
if(hash.num == num)
return true;
}
return false;
}
public static void main(String[] args){
HashSet<HashCode> hset = new HashSet<HashCode>();
hset.add(new HashCode(10));
hset.add(new HashCode(20));
hset.add(new HashCode(20));
System.out.println("데이터 수: " + hset.size());
Iterator<HashCode> itr = hset.iterator();
while(itr.hasNext())
System.out.println(itr.next());
}
}
'JAVA Programming > JAVA 개념 정리' 카테고리의 다른 글
JAVA 람다식과 컬렉션 프레임 워크 (1) | 2024.04.03 |
---|---|
JAVA Synchronized 스레드 동기화 (0) | 2024.04.02 |
JAVA Exception 사용자 예외처리 (1) | 2021.12.04 |
JAVA Exception 예외 처리 (0) | 2021.12.03 |
JAVA interface 인터페이스 abstract class 추상 클래스 (0) | 2021.12.02 |