0709 Collection

onnbi·2022년 7월 26일
0

java-tutorial

목록 보기
10/13
post-thumbnail

Collection

자바에서 제공하는 자료구조를 담당하는 Framework

자료구조란, 자료를 구조적으로 저장하고 관리하기 위한 방법을 말한다
알고리즘이란, 저장된 자료구조를 찾거나, 변형하거나, 수정하는 방법을 말한다

Collection을 사용하면 데이터의 추가, 삭제, 정렬의 기능 처리가 간단하게 해결되어 자료구조적 알고리즘을 사용자가 따로 구현하지 않아도 된다

자료구조

List

array와 가장 비슷한 형태

자료를 순차적으로 나열한 자료구조로 인덱스로 관리된다
객체를 중복해서 저장할 수 있다
ArrayList, Vector, LinkedList

public void listTest1() {
	//길이가 3인 문자열배열 선언
	String[] arr = new String[3];
	// 만들어지는 것과 동시에 배열의 길이가 결정됨
	arr[0] = "hi";
	arr[1] = "hello";
	arr[2] = "bye";
	System.out.println("배열의 길이 : "+arr.length);
		for(int i=0; i<arr.length; i++) {
			System.out.println(i+"."+arr[i]);
		}
		System.out.println("------------------------");
		// ArrayList는 객체 생성 시
        // 배열로 관리할 자료형을 제네릭으로 지정
		ArrayList<String> list = new ArrayList<String>();
		System.out.println("리스트의 길이 : "+list.size());
        // 배열의 length 리스트의 size
		list.add("hi"); // 리스트 가장 뒤에 데이터 추가
		list.add("hello"); // add와 동시에 칸 생성
		list.add("bye"); // 생성된 칸에 입력한 문자가 들어감
		// 배열은 초기화한 값으로 길이가 정해지지만,
        // 리스트는 길이제한이 없다
		System.out.println("리스트의 길이 : "+list.size());
		System.out.println(list.get(0));
		System.out.println(list.get(1));
		System.out.println(list.get(2));
		for(int i=0; i<list.size(); i++) {
			System.out.println(list.get(i));
		}
	}

주요 메서드

  • .get(param) : 해당 인덱스에 위치한 객체를 가져옴
  • .add(param) : 매개변수로 받아온 값을 리스트 가장 맨 뒤에 추가한다
  • .add(param1, param2) : 첫 번째 자리에 두 번째 매개변수를 추가한다
  • .set(param1, param2) : 첫번째 자리를 두 번째 매개변수로 교체한다
  • .remove(param1) : 매개변수 위치에 있는 객체를 리스트에서 삭제한다
  • .clear() : 리스트 내부 모든 데이터를 삭제한다
  • .contains(param1) : 매개변수로 전달한 값이 리스트에 존재하는지 확인하여 결과 리턴 (true / false)
  • isEmpty() : 컬렉션이 비어있는지 확인

Set

중복 객체를 저장하지 못하는 자료구조

수학으로 비유하면 집합이며, 저장 순서가 유지되지 않는다
null 또한 중복되지 않기 때문에 1개의 null만 저장할 수 있다
HashSet, TreeSet, LinkedSet

public void setTest() {
	HashSet<Integer> set = new HashSet<Integer>();
	//set은 인덱스 번호가 없다
	set.add(10);
	System.out.println("set의 길이 : "+set.size());
	System.out.println(set);
	set.add(20);
	set.add(30);
	System.out.println(set);
	// 순서가 없이 들어간다, 중복값을 허용하지 않는다
	set.add(10); // 이미 존재하기 때문에 들어가지 않는다
	System.out.println(set);
	boolean bool1 = set.add(20);
    //데이터 추가를 시도하고 그 결과를 리턴
	System.out.println(bool1); // false리턴
	boolean bool2 = set.add(100);
	System.out.println(bool2); // true리턴
	set.remove(100);
    // 매개변수로 받은 데이터와 일치하는 value를 찾아 삭제
	// 인덱스가 없기 때문에 값을 넣는다
	System.out.println(set+" < set");
  
  // > set의 목적 : 중복을 처리한다

  
	// set은 인덱스로 관리하지 않기 때문에 꺼내는 방법이 필요
	// 1. foreach
	for(Integer num : set) { // 전부 순회한다
		System.out.println((num));
	}
		
	// 2. ArrayList 활용
	// set에 저장된 데이터와 동일한 타입을 저장할 수 있는
    // ArrayList 생성
	ArrayList<Integer> list = new ArrayList<Integer>(set);
	System.out.println(list+" < list");
		
	// 3. 반복자(iterator)를 이용한 방법
	Iterator<Integer> iter = set.iterator();
  	// set에 있는 값을 토큰으로 잘라서 가지고 있음
	// hasNext(): 꺼내올 값이 남아있으면 t/ 없으면 f리턴
	// next(): 값 한 개를 꺼내옴
  	// (StringTokenizer와 유사)
		
	while(iter.hasNext()) { // 꺼내올 값이 없을 때까지
		Integer num = iter.next();
		System.out.println(num);
		} // 가장 정확한 set의 값을 꺼내는 방법
	}

Map

key, value로 구성되며 키와 값 모두 객체타입이다

키는 인덱스와 비슷하게 사용되어 중복저장이 불가하다 (set의 특성)
값은 중복 저장이 가능하다 (list 특성)
키를 중복해서 넣을 경우 덮어쓰기
HashMap, HashTable, LinkedHashMap, Properties, TreeMap

public void mapTest1() {
	ArrayList<String> list = new ArrayList<String>();
	list.add("hi");
	list.add("hello");
	list.add("bye");
	list.add("hi");
	System.out.println(list.get(1));
	
	// 정수를 통해서 문자열을 관리하는 맵 생성
	// 순서대로 0인덱스부터 넣는 list와 달리 map은 지정해주어야 함
	HashMap<Integer, String> map = new HashMap<Integer, String>();
	map.put(0, "hi");
	map.put(1, "hello");
	map.put(2, "bye");
	map.put(3, "hi");
	System.out.println(map.get(1)); // hello
}

map은 add가 아닌 put을 사용한다

public void mapTest2() {
	HashMap<String, String> map = new HashMap<String, String>();
	// put(key, value> : map에 데이터를 삽입하는 메서드
	// key는 중복되지 않는 값
	map.put("one", "hi");
	map.put("two", "hello");
	map.put("three", "bye");
	System.out.println(map);
	// 넣을 때 쓴 키값을 통해 value를 구해온다
	System.out.println(map.get("two"));
	System.out.println(map.get("three"));
	map.put("two", "집");
	System.out.println(map.get("two"));
	// 겹치는 key값을 넣게되면 이전 데이터에 덮어쓰기
	map.put("zero", "hi"); //value가 겹치는 건 아무 상관 없음
	System.out.println(map.get("four")); //null
	
  //containsKey(param)
  //매개변수로 받은 데이터가 key로 사용중이면true, 사용중이지 않으면 false
	boolean bool1 = map.containsKey("one");
	boolean bool2 = map.containsKey("four");
	System.out.println(bool1); //true
	System.out.println(bool2); //false
	
  // remove(key) : 키값에 해당하는 데이터를 삭제
	System.out.println(map);
	map.remove("two");
	System.out.println(map);
	
  // keyset() : 모든 키를 Set에 담아 리턴
  // map에 있는 모든 데이터 꺼내올 때 키 전체를 알아야 함
	Set<String> keys = map.keySet();
    // 모든 key값을 set형태로 가져옴
	for(String key : keys) { // 가져올 값 : 전체값
		System.out.println(map.get(key));
	}
}
profile
aelatte coding journal

0개의 댓글