자바 공부/[자바] 기본 공부

[자바 공부 4일차] 컬렉션 프레임워크 ( Generic, Set, List, Map)

햅2024 2024. 11. 11. 16:53

자동 임포트 하는 법 컨트롤+스페이스

  • Generic

Generic을 통해 get,set 클래스의 자료형을 지정할 수 있다.

 

public class Box<E> {
	private E obj;
	
	public void setObj(E obj) {
		this.obj = obj;
	}
	
	public E getObj()
	{
		return obj;
	}	
}

<E> 안에 자료형을 넣어 원하는 자료형의 형태를 만든다.

 

public class BoxExam {
	public static void main(String[] args)
	{
		Box<String> box = new Box();

		box.setObj("hello");
		String str = box.getObj();
		System.out.println(str);
		
		Box<Integer> box2 = new Box();
		box2.setObj(5);
		int n = box2.getObj();
		System.out.println(n);
	}
}

 

  • Set : 중복이 없고 순서가 없는 배열

Set을 통해 데이터를 설정하고 추가할 수 있다.

package JavaUtil.exam;

import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;

public class setExam {
	public static void main(String[] args) {
		Set<String> set1 = new HashSet<>();
		boolean flag1 = set1.add("kang");
		boolean flag2 = set1.add("kim");
		boolean flag3 = set1.add("kang"); //중복값이기 떄문에 저장되지 않음
		
		System.out.println(set1.size());
		
		System.out.println(flag1);
		System.out.println(flag2);
		System.out.println(flag3); //중복값이기 떄문에 false 출력
		
	}
}

 

해당 함수를 실행하면, set1의 size=2 가 출력되며, flag3만 false가 출력될 것이다. 중복 데이터는 저장되지 않기 때문에 처음 저장한 kang, kim 만 저장되는 것이다. 

 

그럼 이제 저장된 데이터를 출력해보자.

저장된 데이터를 출력할 땐 iterator를 이용한다.

 

Iterator<String> iter = set1.iterator(); //자료를 하나씩 꺼냄
while(iter.hasNext())
{
    System.out.println(iter.next());
}

 

while 문과 .hasNext()라는 메소드를 통해 모든 데이터를 출력할 수 있다.

hasNext()란 다음 데이터가 있는지 true, false 값을 리턴해주는 메소드이다.

.next() 메소드를 이용해 다음 데이터를 출력할 수 있다. 

 

  • List (벡터형 배열, 데이터 중복O, 순서 O)

List를 사용하면 중복값을 배열에 저장할 수 있다.

List는 벡터형이기 때문에 사이즈가 정해지지 않고 더하는 만큼 늘릴 수 있다. 또한 데이터 값에 순서를 갖는다.

List는 list.get(index) 라는 메소드를 통해 순서에 해당하는 데이터를 출력할 수 있다.

 

package JavaUtil.exam;

import java.util.ArrayList;
import java.util.List;

public class ListExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<>();
		list.add("kim");
		list.add("kang");
		list.add("kim");
		
		System.out.println(list.size());

		for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
		
	}

}

 

  • Map <Key, Value>

.put(Key, Value) 메소드를 통해 key 값과 value 값을 추가한다.

.get(Key) 메소드를 통해 Value 값을 읽는다.

Key 값을 중복으로 설정할 경우, 나중에 설정한 값이 최종 value 값이 된다.

package JavaUtil.exam;

import java.util.HashMap;
import java.util.Map;

public class MapExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = new HashMap<String, String>();
		map.put("001", "Kim");
		map.put("002", "Lee");
		map.put("003", "Choi");
		
		map.put("001", "kang");
		
		System.out.println(map.size());
	
		System.out.println(map.get("001"));
	}

}

다음의 경우, Kang이 kim을 대체하여 Key 001의 값에 value로 들어갔을 것이다.

 

그러나 데이터의 양이 많아진다면 Key 값을 일일이 기억하기 힘들 것이다.

이럴 땐 앞서 배운 Set과 Iterator 클래스를 이용하면 된다.

 

Set<String> keys = map.keySet();		
Iterator<String> iter = keys.iterator();

다음과 같은 방법을 통해 Iterator에 key 값을 저장한다.

 

while(iter.hasNext())
{
    String skey = iter.next();
    String value = map.get(skey);
    System.out.println(value);
}

while 문을 통해 key값에 따른 value 값을 출력할 수 있다.