[JAVA] 컬렉션 (01.06)

늘보·2025년 1월 6일

Java

목록 보기
9/17
post-thumbnail

컬렉션

  • 자료 구조 중 하나이다.
  • 배열보다 다수의 참조형 데이터를 쉽고 효과적으로 처리할 수 있는 기능을 지니고 있다. (크기 자동 조정, 추가, 수정, 삭제 등)
  • 종류로는 List, Set, Queue, Map 등이 있다.
  • Array와 달리 최초 길이를 알 필요가 없다.

List

  • 순서가 있고, 데이터 중복이 가능한 데이터의 집합이다.
  • 크기가 가변적으로 늘어나는 동적 배열이다.

선언과 생성

📌 레퍼런스 타입 보러가기 : 래퍼 클래스 부분 참고

💡List <레퍼런스 타입> 변수 = new ArrayList <>():로 쓸 수도 있다.


값 추가, 삭제, 수정, 가져오기

  • 추가 변수.add(데이터)

  • 삭제 변수.remove(index)

    전체 삭제를 원할 경우에는 변수.clear ( )을 하면된다.

  • 수정 변수.set(index, 바꿀 값)

  • 가져오기 변수.get(index)

💡변수.toString ( ): 리스트 내의 값을 사람이 보기 쉽게 해준다.

	List<Integer> intList = new ArrayList<Integer>(); // 선언 및 생성
	intList.add(1);
	intList.add(2);
	intList.add(3);
    System.out.println(intList.toString());

[출력] ➡︎ [1,2,3]


LinkedList

  • 메모리에 남는 공간을 요청해서 여러 곳에 실제 값을 담아둔다.
  • 실제 값이 있는 주소값 목록을 구성하고 저장하는 자료구조이다.
  • 기본적인 기능을 ArrayList와 동일하다.
  • 다만, 값을 여러 곳에 담아두었기 때문에 조회 속도가 느린편이다.
  • 하지만 값을 추가하고 삭제하는 것은 빠르다.

선언하기

LinkedList <레퍼런스 타입> 변수 = new ArrayList <>();

💡 linkedList.add (index, 추가 값): 중간에 값을 추가할 수 있다.


Stack

  • 수직으로 값을 쌓아두고 넣었다가 빼는 형식으로 FILO를 따른다.
  • 최근에 저장된 데이터를 나열하거나 데이터 중복처리를 막고 싶을 때 사용한다.

    💡 FILO: First Input Last Out의 줄임말로 가장 먼저 들어온 값이 가장 나중에 나간다는 의미이다.


선언과 생성

Stack <레퍼런스 타입> 변수 = new Stack <>();


값 넣기, 조회, 빼기

  • 넣기 변수.push(데이터)

  • 조회 변수.peek()

    가장 마지막에 추가된 데이터가 조회된다.

  • 빼기 변수.pop()

💡변수.isEmpty ( ): stack에 쌓인 데이터가 없는 경우 TRUE, 있는 경우 FALSE를 반환한다.

💡 크기를 알고싶은 경우 변수.size()를 하면된다.

		Stack<Integer> intStack = new Stack<Integer>(); // 선언 및 생성
		intStack.push(1);
		intStack.push(2);
		intStack.push(3);
		while (!intStack.isEmpty()) { // 다 지워질때까지 출력
		    System.out.println(intStack.pop()); // 3,2,1 출력
		}

📌 생성자 개념 보러가기 클래스 설계하기생성자 정의 부분 참고

Queue

  • 생성자가 없는 인터페이스이다.
  • FIFO를 따른다.

    💡 FIFO: First Input First Out의 줄임말로 가장 먼저 들어온 데이터가 가장 먼저 나간다는 의미이다.


선언과 생성

Queue <레퍼런스 타입> 변수 = new LinkedList <>();

❗생성자가 없기 때문에 생성자가 있는 LinkedList를 사용해 생성할 수 있다.


값 넣기, 조회, 빼기

  • 넣기 변수.add(데이터)

  • 조회 변수.peek()

    가장 먼저 추가된 데이터가 조회된다.

  • 빼기 변수.poll()

    💡 크기를 알고싶은 경우 변수.size()를 하면된다.


Set

  • 순서가 없으나, 데이터 중복이 허용되지 않는다.
  • 생성자가 없다.

선언과 생성

Set <레퍼런스 타입> 변수 = new HashSet <>();

❗생성자가 없기 때문에 생성자가 있는 HashSet, TreeSet 등을 사용해 생성할 수 있다.
💡 보통 HashSet을 쓰지만 순서 보장이 필요할 때에는 LinkedHashSet을 사용한다.


값 넣기, 조회, 빼기

  • List와 기능은 동일하다.

💡변수.contains (확인할 값) : set에 해당하는 값이 있는지 물어보는 메서드로 맞다면 true, 틀리면 false를 반환한다.

		Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성
		intSet.add(1);
		intSet.add(2);
		intSet.add(3);
        System.out.println(intSet.contains(2)); // true 출력
		System.out.println(intSet.contains(4)); // false 출력

Map

  • Keyvalue로 구성되어 있다.
  • Key는 중복이 되지않으며, Key를 통해 value를 조회할 수 있다.

선언과 생성

Map <Key 레퍼런스, value 래퍼런스> 변수 = new HashMap <>();

❗Map으로도 생성할 수 있지만 HashMap, TreeMap 등으로 응용해서 사용할 수도 있다.

💡 HashMap: 중복을 허용하지 않고, 순서를 보장하지 않지만 Key와 Value를 NULL로 할 수 있다.

💡 TreeMap: Key값을 기준으로 정렬할 수 있지만, 오름차순을 하기 때문에 저장시간이 오래걸린다.


값 넣기, 조회, 삭제, Key만 빼기, value만 빼기

  • 넣기 변수.put(key, value)

  • 조회 변수.get(key)

    key를 통해 value를 조회할 수 있다.

  • 삭제 변수.remove({key})

  • Key만 빼기 변수.keySet()

  • value만 빼기 변수.values()

💡 Key만 빼기, value만 빼기 사용 예시

		// key 값 전체 출력
		for (String key : 변수.keySet()) {
			System.out.println(key); 
		}
		// value 값 전체 출력
		for (Integer value : 변수.values()) {
			System.out.println(value); 
		}

Key가 중복인 경우 가장 마지막에 추가된 데이터로 덮어씌워진다.

		변수.put("삼", 14); 
		변수.put("삼", 15); 

➡︎ "삼"으로 key가 중복되었기 때문에 "삼"이라는 key의 value15로 덮어씌워진다.

profile
누워만 있지 말고 제발 뭐라도 하자.

0개의 댓글