본문 바로가기
java

제네릭과 컬렉션

by 신방동불주먹 2022. 10. 11.

< 컬렉션 (Collection Framework) >

 

- 다수의 데이터를 효과적으로 처리할 수 있도록 표준화된 방법을 제공하는 클래스의 집합

- 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현

- 배열이 가진 고정 크기의 단점을 극복하기 위한

가변 크기의 컨테이너로 객체의 개수 고려 하지 않아도 된다- 컬렉션 내의 한 객체가 삭제되면 컬렉션이 자동으로 자리를 올겨준다

 

 

주요 인터페이스

  • List  : 순서가 있는 데이터 집합, 데이터 중복 허용 (Vector, ArrayList, LinkedList, Stack, Queue)
  • Set : 순서가 없는 데이터 집합, 데이터 중복 불허 (HashSet, TreeSet)
  • Map : 키와 값이 쌍으로 이루어지는 데이터 집합, 순서가 없음. 키는 중복될 수 없지만 값은 중복 허용 (HashMap, TreeMap, Hashtable, Properties)

 

Collection 인터페이스

- List와 Set이 상속하는 인터페이스로 list와 set의 공통된 부분을 정의

Map 인터페이스

- Map은 구조상의 이유로 별도 인터페이스로 정의함 

 

 

  • Set 
    데이터의 중복을 허용하지 않는데 서로 다른 객체로 인식하여 중복 입력되는 것을 막기위해 hashcode, equals 오버라이딩을 필요로 한다. 
Set<Person> set = new HashSet();

set.add(new Person("Hongkil", 10));
set.add(new Person("Hongkil", 10));		
System.out.println(set);

 }
}
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@AllArgsConstructor
@ToString
@EqualsAndHashCode

public class Person {

	String name;
	int age;

	@Override //name과 age를 +하여 또 하나의 객체를 만들어 가리키기 때문에 같은 hashcode를 갖게된다?
	public int hashCode() {
		return (this.name + this.age).hashCode();
	}

	@Override
	public boolean equals(Object obj) {
	Person another = (Person)obj;
	return this.name.equals(another.name) && this.age == another.age;
}	
}

 

 

** 비교 

( == ) 연산 즉 객체의 주소 값을 비교 

String의 경우 new를 이용하여 String 객체를 비교하면 주소값이 다르기에 정상 비교가 되지 않는다.

=> .equals()를 사용

  • equals()를 오버라이딩했다면 반드시 hashCode() 비교도 동일한 동작을 하도록 오버라이딩 한다.
  • 즉 [ A.equals(B) ]가 True라면 [ A.hashCode() == B.hashCode ]도 True가 되도록 만들어야 한다

 

< 제네릭 >

 

- 제네릭(타입한정) : 컬렉션 객체의 데이터 타입을 한정한다. 

//ArrayList<Integer> list = new ArrayList<Integer>();

ArrayList<String> list = new ArrayList<String>();
list.add("1"); //String -> Object 형변환
list.add("2");
list.add("3");
list.add("4");
list.add("5");

// list.add(1); integer 넣을 수 없음 
	
list.get(0); //string 타입으로 읽어옴
		
		//Iterator it = list.iterator();
		
		Iterator<String> it = list.iterator(); //타입 동일하게 설정  컬렉션에 제네릭을 적용하는것 
		
		while(it.hasNext()) {
			String str = it.next();
			System.out.println(str);
		}
		
		}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.EmptyStackException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Stack;
import java.util.TreeSet;

import Collection.Student;


public class WrapperTest { //1011Wrapper Class

	public static void main(String[] args) {


		

		
	
		
	
		
		
		
		
		//student 클래스의 compareto 오버라이딩 반으로 정렬 
		TreeSet<Student> set = new TreeSet<Student>();
		
		Student s1 = new Student("kim", 9,1,10,10,10);
//		Student s2 = new Student("pim", 3,1,10,10,10);
//		Student s3 = new Student("gim", 4,1,10,10,10);
//		Student s4 = new Student("him", 7,1,10,10,10);
		Student s5 = new Student("qim", 1,1,10,10,10);
		
		set.add(s1);
//		set.add(s2);
//		set.add(s3);
//		set.add(s4);
		set.add(s5);
		
		Iterator it = set.iterator();
		while(it.hasNext()) {
			Student s = (Student) it.next(); //캐스팅 : 기본object 클래스로 넘겨주기때문
			System.out.println(s.toString());
			
		}
	}
	}
/*	
		Set<Integer> set = new HashSet<Integer>(); //부모타입인 set으로 도 가능
	
		//빙고 중복 없는 데이터 넣기 위함 
		
		int[][] bingo = new int[5][5];
		
		for(int i=0; set.size()<25 ; i++) {//set.size()로만 하면 중복되면 안들어가기 때문에 25개 안들어 갈 수 있음
			set.add((int)(Math.random()*50)+1); 
				
		}
		
		//System.out.println(set);
		
		//골고루 섞어주는 기능
		ArrayList list = new ArrayList(set);//셔플기능이 arraylist에 있기 때문에 (collection) 
		Collections.shuffle(list); 
	
		Iterator<Integer> it = list.iterator();
		
		for(int i=0;i<bingo.length;i++) {
			for(int j=0;j<bingo[i].length;j++) {
				bingo[i][j] = it.next(); 
			}
		}
		
		for(int i=0;i<bingo.length;i++) {
			for(int j=0;j<bingo[i].length;j++) {
				System.out.print(bingo[i][j] +" "); //1~2까진 1의자리가 섞이고 완전히 잘 섞이진 않는다
			}
		System.out.println();
		} */

'java' 카테고리의 다른 글

Collection(Map)  (0) 2022.10.12
Iterator (반복자 패턴)  (0) 2022.10.11
Collection(List)  (0) 2022.10.11
래퍼 클래스(Wrapper class)  (0) 2022.10.11
Calendar 클래스  (0) 2022.10.11