본문 바로가기
Category/JAVA

[JAVA] Collection FrameWork

by developer__Y 2023. 11. 13.

Collection Framework

  1. List Collection
  2. Set Collection
  3. Map Collection

기존 배열의 문제점 : 배열 길이를 생성시 결정, 배열 원소 삭제되면 해당 인덱스가 빈 공간으로 남아 효율이 떨어짐.

→ 객체들을 효율적으로 추가,삭제,검색할 수 있도록 제공되는 라이브러리

  1. List (인터페이스)

배열과 유사하게 인덱스로 관리. List 객체를 배열처럼 사용

ArrayList 는 List 인터페이스를 상속 받은 클래스

객체의 특정 인덱스 값 삭제시, 자동으로 땡겨짐

 

  1. Set (인터페이스)

집합과 비슷한 개념. 중복 값을 허용하지 않음.

저장 순서가 유지되지 않는다. (=인덱스 번호가 없다)

Set값을 가져올 때는 반복자 Iterator를 통해 전체를 한개씩 가져옴.

→ Set는 인덱스가 없기 때문에 for문을 통해 꺼낼 수 없기 때문에 (HashSet은 for-each문으로 꺼낼수 있다.)

Iterator이라는 인터페이스를 사용해서 하나씩 꺼낼수 있다

 

 

public class HashSetExample {
	public static void main(String[] args) {
//		Set 인터페이스 컬렉션 타입으로 HashSet클래스 객체를 upcasting
		Set<String> set = new HashSet<String>();
//		Set<Object> set = new HashSet<>();
		set.add("Java");
		set.add("JDBC");
		set.add("Servlet/JSP");
		set.add("Java"); // 중복된 값은 넣을 수 없다.
		set.add("iBatis");
		
//		AA a = new AA();
//		set.add(a); //제네릭 타입을 Object로 하면 객체도, String도 저장 가능
		int size = set.size();
		System.out.println("총 객체수 : "+size);
//		set컬렉션은 iterator 메소드를 호출해서 iterator 인터페이스 타입으로 값을 받음.
		Iterator<String> iterator = set.iterator();		
		while(iterator.hasNext()) { //iterator 객체 값이 있으면
			String element = iterator.next(); // iterator메소드를 통해 set 다음 값을 순차적으로 element에 담는다. 
			System.out.println("\t"+element);
		}
		set.remove("JDBC");
		
	}
}

 

 

 

  1. Map (인터페이스)

Key , Value 로 키와 값의 쌍으로 구성된 Map.Entry 객체를 저장한다.

Key=”one”, Value = “content” key는 중복될수 없지만 값은 중복 저장가능.

Set<Map.Entry<K,V>> entrySet() : 키,값 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴

key값을 Set 객체안에 담아서 주로 사용 한다. (key는 중복될 수 없기때문)

public class HashMapExample {
	public static void main(String[] args) {
//		Map 인터페이스 타입으로 HashMap 클래스 객체 Upcasting 생성(키:문자열,값:정수형 Wrapper 클래스)
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("임영웅", 31);
		map.put("영탁", 38);
		map.put("이찬원", 25);
//		map.put("임영웅", 30); // key값은 중복이 안되고, 값은 중복 허용되므로 값을 덮어 썼다.
		map.put("김호중", 30);
		map.put("정동원", 14);
		
		System.out.println("총 Entry수 : "+map.size());
		System.out.println("임영웅:"+map.get("임영웅"));
		System.out.println();
		Set<String> keySet = map.keySet(); //모든 key를 Set 객체에 담아서 리턴
//		for(String string:keySet) {
//			System.out.println(string);
//		}
//		Map 컬렉션 키/값을 가져오는 1번째 방법 : key값만 가져와서 얻은 key값을 통해 map.get 메소드를 통해 value를 가져온다.  
		Iterator<String> keyIterator = keySet.iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			Integer value = map.get(key);
			System.out.println(key + ":"+ value); // 출력 순서는 무작위로 나온다.
		}
		System.out.println();
		
		System.out.println("총 Entry 수:"+map.size()); // Map.Entry 구조로 키/값으로 구성
		map.remove("임영웅"); // key를 삭제하면 Map.Entry 하나가 통으로 사라진다.
		System.out.println("총 Entry 수:"+map.size()); // Map.Entry 구조로 키/값으로 구성
		
		
//	    Map 컬렉션 키/값을 가져오는 2번째 방법
		// Map.Entry 구조의 키/값으로 구성된 Set 객체 entrySet를 생성.	
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		// Set 컬렉션 방식으로 Iterator 객체를 통하여 entrySet 이라는 객체를 꺼내옴
		Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
		
		while(entryIterator.hasNext()) { // 객체가 있으면 참
			Map.Entry<String, Integer> entry = entryIterator.next();
			String key = entry.getKey(); // Map의 
			Integer value = entry.getValue();
			System.out.println(key +" "+ value);
		}
	
	}
}