컬렉션(List)

김나영·2023년 6월 12일
0

Java 문법 종합반

목록 보기
8/21

컬렉션

  • 기능 : 크기 자동조정, 추가, 수정, 삭제, 반복, 순회, 필터, 포함확인 등

  • 종류

    • List : 순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷

    • Queue : 빨대🥤처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합

      • First In First Out : 먼저들어간 순서대로 값을 조회 가능
    • Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) - 순서없고 중복없는 배열

    • Map : 순서가 없는 (Key,Value) 쌍으로 이루어진 데이터의 집합 (Key값 중복 허용 안함)

      • key(unique) 값으로 value 값 찾음

1. List

  • 순서가 있는 데이터의 집합 => Array(최초 길이를 알아야함)

  • 1) Array -> 정적배열

  • 2) List(ArrayList) -> 동적배열(크기가 가변적으로 늘어난다)

    • 생성 시점에 작은 연속된 공간을 요청해서 참조형 변수를 담아놓는다.

    • 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장하니깐 상관X

1-1) ArrayList

  • 값 추가 : intList.add({추가할 값})

  • 값 수정 : intList.set({수정할 순번}, {수정할 값})

  • 값 삭제 : intList.remove({삭제할 순번})

  • 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력

  • 전체 제거 : intList.clear()

ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
System.out.println(intList.get(1)); // 99 출력(맨 처음에 추가된 99가 출력)
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
// 2번째 있는 값(15)를 바꿔보자
intList.set(1,10); // 첫 번째를 10으로 바꾸자
System.out.println(intList.get(0)); // 10 출력
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
intList.remove(0); // 첫번째 숫자 삭제
System.out.println(intList.get(0)); // 15 출력
  • 첫 번째 인덱스 99가 삭제되고 15가 첫 번째 인덱스가 됨

    • 배열은 0부터 시작하기 때문에 0이 첫 번째 숫자가 됨
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
intList.remove(0); // 0번째거 삭제
System.out.println(intList.get(0)); // 15 출력
System.out.println("클리어 전"); 
System.out.println(intList.toString()); // [15, 3] 출력
intList.clear();
System.out.println("클리어 후");
System.out.println(intList.toString()); // List 안에 있는 값을 사람이 볼 수 있게 만들어줌 [] 출력

1-2) LinkedList

  • 메모에 남는 공간을 요청해서 여기 저기 나누어서 실제 값을 담아줌
  • 실제 값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조
  • 기본적 기능은 -> ArrayList와 동일!!
  • LinkedList는 값 -> 여기 저기 나누어서 값을 담음 -> 조회하는 속도가 "느리다..."
  • 값을 추가하거나, 삭제 할 때는 빠름
  • 값 추가 : linkedList.add({추가할 값})
  • 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값})
  • 값 수정 : linkedList.set({수정할 순번}, {수정할 값})
  • 값 삭제 : linkedList.remove({삭제할 순번})
  • 전체 출력 : linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력
  • 전체 제거 : linkedList.clear()
LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(5);
linkedList.add(10);
linkedList.add(3);
System.out.println(linkedList.get(0)); // 5
System.out.println(linkedList.get(1)); // 10
System.out.println(linkedList.get(2)); // 3
System.out.println(linkedList.toString()); // 조회할 때는 arraylist보다 속도가 현저히 느리다.
linkedList.add(200);
System.out.println(linkedList.toString()); // [5, 10, 3, 200]
linkedList.add(2,4); // 2번째 인덱스에 4를 추가
System.out.println(linkedList.toString()); // [5, 10, 4, 3, 200]
linkedList.set(1,30); // 첫 번째 인덱스 값을 30으로 바꿔라
System.out.println(linkedList.toString()); // [5, 30, 4, 3, 200]
linkedList.remove(1); // 첫 번째 인덱스 삭제
System.out.println(linkedList.toString()); // [5, 4, 3, 200]
linkedList.clear();
System.out.println(linkedList.toString()); // [] 출력
    }
}

1-3) Stack

  • 수직으로 값을 쌓아놓고, 넣었다가 뺀다. FILO(First In Last Out) -> basket이라고 생각하면 됨
  • 최근 저장된 데이터를 나열하고 싶거나, 데이터의 중복 처리를 막고 싶을 때 사용
  • 추가 : intStack.push({추가할 값})
  • 조회 : intStack.peek() 맨 위값을 조회
  • 꺼내기 : intStack.pop() 맨 위값을 꺼냄(꺼내고나면 삭제됨)
Stack<Integer> intstack = new Stack<Integer>(); // 선언 및 생성
intstack.push(10);
intstack.push(15);
intstack.push(1);
// 다 지워질 때까지 출력
while (!intstack.isEmpty()) { // intstack이 비어있으면 false, 그게 아니면 true
   System.out.println(intstack.pop()); // 맨 상단에 있는 것만 pop 위로 빼주면 리턴이 되면서 stack에서 빠지게 됨
}                           // 1 15 10 순서로 pop
intstack.push(10);
intstack.push(15);
intstack.push(1);
// peek
System.out.println(intstack.peek()); // 맨 위에 있는 값 1 출력
System.out.println(intstack.size()); // 3
}
  • isEmpty() : Stack이 비어있으면 true, 그게 아니라면 false를 반환

0개의 댓글