JAVA Programming/JAVA 개념 정리

JAVA 제네릭 타입 컬렉션 클래스

psy_er 2021. 12. 5. 01:49
728x90

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());
   }
}
728x90