JAVA - 컬렉션 프레임워크

컬렉션

메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조라 일컫는데, 컬렉션은 자바에서제공하는 자료구조를 담당하는 프레임워크이다.

추가, 삭제, 정렬 등의 기능처리가 간단하게 해결 되어 자료구조적 알고리즘을 구현할 필요가없음

 

배열의 문제점

1. 한 번 크기를 지정하면 변경할수없음.

2. 배열의 기록된 데이터에 대한 중간 위치의 추가, 삭제 가 불편함

3. 한 타입의 데이터만 저장가능함

 

컬렉션의 장점

1. 저정하는 크기의 제약이 없음

2. 추가, 삭제, 정렬 매우 간편함

3. 여러 타입의 데이터를 저장가능

 

컬렉션 주요 인터페이스

List - 순서를 유지하고 저장 ,중복허용 ex : ArrayList, LinkedList, Vector

Set - 순서가 없고, 중복저장 불가 ex : HashSet, TreeSet

Map - 키값과 벨류값 쌍으로 저장, 키값은 중복저장 불가 ex : HashMap, TreeMap

 

List

자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장가능

구현 클래스로는 ArrayList(대표적으로 많이사용됨), Vector, LinkedList

 

List 인터페이스의 메소드 종류

 

 

ArrayList

List의 후손으로 초기 저장용량은 10으로 자동 설정되며 따로 지정도 가능

저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능

 

 

// List의 후손 클래스로 객체 생성(다형성 : 부모 레퍼런스로 자식 객체 다룸)
List list = new ArrayList();

// 1. add(E e) : 리스트의 끝에 데이터 추가
list.add("가");
// 출력 [가]

// 2. add(int index, E ) : 인덱스 지정하여 데이터 추가
list.add(0, "나");
// 출력 ["나", "가"]

// 3. set(int i, E e) : 지정한 인덱스의 값 변경
list.set(1, "다");

// 4. size() : 리스트 안의 몇개의 데이터 있는지 확인
list.size(); // 2

// 5. remove(int index) : 해당 인덱스의 값 삭제
list.remove(1); // "다" 삭제

// 6. get(index i) : 해당 인덱스 값 조회
list.get(0); // 1 출력

// 7. isEmpty() : 리스트 안의 값이 비었으면 true, 값있으면 false 반환
list.isEmpty(); // false 반환

// 8. clear() : 리스트 값 전체 삭제
list.clear();

 

 

Set

저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게 하는 자료 구조

null도 중복을 허용하지 않기 때문에 1개의 null만 저장

구현 클래스로 HashSet, LinkedSet, TreeSet 이있음

 

Set 메소드

 

HashSet

Set에 객체를 저장할 때 hash함수를 사용하여 처리 속도가 빠름

동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음

 

package set;

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

public class Run {
	public static void main(String[] args) {
		
		HashSet<String> set = new HashSet<>();
		
		
		// 1. add(E e) : 데이터 추가 메소드
		set.add("안녕하세요.");
		set.add("자바메소드 너무많아");
		set.add("jsp도 배우고싶다얼른");
		set.add("가자~");
		
		// 출력
		System.out.println("HashSet 메소드 출력");
		// 출력을 하였는데 입력한순서대로 출력이 안된다.
		System.out.println(set);
		
		// 2. iterator() : set이 가지고있는 값만큼 반복 
		System.out.println("===== Iterator 이용하여 출력 =====");
		Iterator<String> it = set.iterator(); //Iterator에서 제네릭사용가능, 제네릭사용안하면 Object형으로 반환되기때문에 형변환 필수
		while(it.hasNext()) {
			// hasNext() : 읽어올수 있는 값이 있는가 있으면 true, 없으면 false
			String value = it.next(); // next() : 값 가져오기
			System.out.println(value);
		}
		
		//Iterator 클래스는 일회용이기 때문에 한번사용하고 또사용할려면 한번더 재생성해줘야한다
		
		// 에러
//		while(it.hasNext()) {
//			// hasNext() : 읽어올수 있는 값이 있는가 있으면 true, 없으면 false
//			String value = it.next(); // next() : 값 가져오기
//			System.out.println(value);
//		}
		
		System.out.println("===== Iterator 재정의후 출력 =====");
		it = set.iterator();
		while(it.hasNext()) {
			String value = it.next();
			System.out.println(value);
		}
		
		
	}
}

 

출력

 

TreeSet

TreeSet은 HashSet이랑비슷하다

다른점은 정렬기준인 오름차순을 해서 출력 해준다는 장점이있다

package set;

import java.util.Iterator;
import java.util.TreeSet;

public class Run {
	public static void main(String[] args) {
		
		TreeSet<Integer> set = new TreeSet<>();
		
		
		set.add(5);
		set.add(2);
		set.add(1);
		set.add(10);
		set.add(8);
		
		System.out.println("===== 정렬하지 않을상태에서 출력 =====");
		Iterator<Integer> it = set.iterator();
		while(it.hasNext()) {
			int value = it.next();
			System.out.print(value + " ");
		}
		
	
	
		
	}
}

 

출력

 

 

 

 

Map

Map은 List와 Set 컬렉션과다르게 왕따 같은존재이다 ..

아래와같이 List, Set 은 Collection 상속받고있고 Map혼자 동떨어져있다 ..왕따같지만 제일 유용한 컬렉션Map

Map은 키와 벨류 가 한쌍으로 모여있는 데이터다 

키의 값은 중복허용하지않고, 벨류값은 중복값 허용한다.

 

Map 종류

HashMap, HashTable, TreeMap, Properties

 

HashMap

키 객체는 hashCode()와 equals()를 재정의해 동등 객체가 될 조건을 정해야하기떄문에

키 타입은 hashCode와 equals 메소드가 재정의 되어있는 String 타입을 주로사용한다.

 

package run;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class Run {

	public static void main(String[] args) {
		//HashMap<K, V> hashMap = new HashMap<>();
		
		// 1. java.util.HashMap import
		// 2. HashMap객체생성 
		
		// <키, 벨류> 키값은 대부분 String 사용 , 벨류 지네릭은 상황보고 입력하자!
		HashMap<String, String> userMap = new HashMap<>();
		
		// 1. V : put(K, V) : Map 데이터 입력은 put() 사용
		// 4개의 유저데이터입력
		userMap.put("hong", "1234");
		userMap.put("kang", "2345");
		userMap.put("lee", "3456");
		userMap.put("soo", "6457");
		
		// 2. boolean : containsKey() : 현재 Map객체안에 key값이 있는지 확인 , 존재하면 true, 존재하지않으면 false
		boolean result = userMap.containsKey("hong"); //true
		System.out.println("userMap.containsKey(\"hong\") : " + result);
		result = userMap.containsKey("kim"); //false
		System.out.println("userMap.containsKey(\"kim\") : " + result);
		
		
		// 3. boolean : containsValue() : 현재 Map객체 안에 value값이 있는 지확인, 존재하면 true, 존재하지 않으면 false
		result = userMap.containsValue("1234"); // true
		System.out.println("userMap.containsValue(\"1234\") : " + result);
		result = userMap.containsValue("없을껄"); // true
		System.out.println("userMap.containsValue(\"없을껄\") : " + result);
		
		// 4.V : get(Object key) : 주어진 key값을 반환
		String value = userMap.get("lee"); //key:lee 값은 3456
		System.out.println("userMap.get(\"lee\") : " + value);
		
		// 5. boolean : isEmpty() : Map객체 안의 값이 비어있는지 확인 비어있으면 true, 값있으면 false;
		System.out.println();
		HashMap<String, String> test = new HashMap<>(); // 현재 비어있음
		result = test.isEmpty(); // true;
		System.out.println("test.isEmpty() : " + result);
		result = userMap.isEmpty(); // false;
		System.out.println("userMap.isEmpty() : " + result); 
		
		// 6. int : size() : Map안의 몇개의 데이터 값이 존재하는지
		int num = userMap.size();
		System.out.println("userMap.size() : " + num);
		System.out.println();
		// 아래부터 중요
		// 7. Set : keySet() : Map이 가지고 있는 key값만 Set컬렉션으로 모두반환
		Set<String> keySet = userMap.keySet(); // 키값 리턴후
		System.out.println("userMap.keySet() : " + keySet);
		
		// 8. Set : EntrySet() : Map에서 Entry란 key,value를 합친 하나의 키벨류 값을 의미한다. 그 쌍을 Set 의 Iterator 클래스 이용할수있게
		//          Set 컬렉션으로 변환 해주는 메소드이다.
	
		Set<Entry<String, String>> setEntry = userMap.entrySet();
		Iterator<Entry<String, String>> it = setEntry.iterator();
		
		while(it.hasNext()) {
			// 값을 받아올땐 Entry로 넘어온다.
			Entry<String, String> entry = it.next();
			// Entry 메소드중 key값과 value값 가져올수있는 메소드가있다.
			// getKey()   : 키값을 가져온다.
			// getValue() : 벨류값을 가져온다.
			entry.getValue();
			System.out.println("키 값 : " + entry.getKey() + ", 벨류 값 : " + entry.getValue());
		}
		
		
		
	}

}

 

출력 

 

TreeMap

검색 기능을 강화시킨 컬렉션으로, 계층 구조를 활용해 이진트리 자료구조를 제공

한마디로 자동으로 오름차순 정렬 제공함

TreeMap의 장점은 오로지 Key값을 오름차순으로 출력을도와줌

하지만 정렬기준을 내림차순으로 정의할수도있음

메소드나 사용방법등 HashMap과 똑같음

package run;

import java.util.Comparator;
import java.util.TreeMap;

public class Run {

	public static void main(String[] args) {
		
		TreeMap<String, String> tree = new TreeMap<>();
		
		// 1. treeMap 데이터 추가
		tree.put("컴퓨터", "1000000");
		tree.put("노트북", "900000");
		tree.put("패드", "600000");
		
		System.out.println("===== 정렬하지도 않았는데 오름차순으로 나옴 =====");
		System.out.println(tree);
		System.out.println();
		
		// 내림차순 하기위해 정렬기준 생성자에 추가
		TreeMap<String, String> DescTree = new TreeMap<>(new DescStr());
		DescTree.put("컴퓨터", "1000000");
		DescTree.put("노트북", "900000");
		DescTree.put("패드", "600000");
		
		System.out.println("===== 정렬기준 추가후 =====");
		System.out.println(DescTree);
		
	}

}

class DescStr implements Comparator<String>{

	@Override
	public int compare(String o1, String o2) {
		
		// 내림차순 하기위해 정의 
		return o2.compareTo(o1);
	}
	
}

 

출력

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA - GUI(Graphic User Interface)  (0) 2021.06.14
JAVA - 정렬(Comparable, Comparator)  (0) 2021.06.08
JAVA - I.O(입출력) > 보조 스트림  (0) 2021.06.04
JAVA - I.O(입출력) > 기반 스트림  (2) 2021.06.03
JAVA - 예외처리  (0) 2021.06.03
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유