내일배움캠프 8일차 TIL - 컬렉션(Collection)

2024. 4. 24. 20:52·⛺스파르타코딩클럽

240424

# 오늘 꼭 기억 해야 할 것!

1. List(ArrayList, LinkedList, Stack), Map, Set, Queue

오늘의 학습 

    ●  1. Collection

    ●  2. 자바 객체지향 - 클래스

    ●  2. 자바 객체지향 - 상속

컬렉션 (Collection)

컬렉션은 자바에서 배열의 한계를 극복하기 위해서 만들어진 자료구조이다. (배열보다 더 많은 기능을 제공)

컬렉션의 기능으로는 크기 자동조정/ 추가/ 수정/ 삭제/ 박복/ 순회/ 필터 포함확인 등등 매우 많고 다양하다.

컬렉션은 기본형 변수가 아닌 참조형 변수를 저장한다. ( 배열은 

 

1.  컬렉션(Collection)의 종류

List(ArrayList) :  순서가 있는 데이터의 집합 ( 데이터 중복 허용 )

Map : 순서가 없는 데이터의 집합이다. Key, Value의 형태로 데이터를 저장해준다. ( Key값은 중복 허용 안함 )

Set : 순서가 없는 데이터의 집합이다. ( 데이터 중복 허용 안함 )

Queue : 한쪽으로 데이터를 넣고 반대쪽으로 데이터를 뺄 수 있는 집합( First In First Out )

1. List

List의 종류

1. ArrayList

2. LinkedList

3. Stack

- List를 상속받는 객체는 총 4가지가 존재한다. 그 중에 3가지만 기록을 하겠다.

List의 특징

1. List는 순서가 있는 데이터의 집합이다. 즉, index의 개념이 있다는 의미이다.

2. 기존 배열과 다르게 List는 최초 길이를 몰라도 만들어서 사용할 수가 있다.

- 기존의 배열(Array)은 정적배열로 메모리에서 연속된 공간을 요청한 만큼만 받는다.

( 즉, 최초 길이 모르면 초기화 불가능 )

- 그에 반해 List는 동적배열로써 크기가 가변적으로 늘어난다. 2번이 가능해진다.

1. ArrayList

// List 선언 및 생성
// ArrayList<자료형> list = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();

// List 배열 안에 값 추가 메서드
// list.add(자료형에 맞는 값);
// 순서가 있는 배열이므로 저장된 순서대로 index 0부터 시작을 한다.
list.add(10);
list.add(20);
list.add(30);

// List 배열 안에 값 뽑는 메서드
// list.get(index) => index번호를 통해 값을 뽑을 수 있다.
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));

// List 배열 안에 값 수정하는 메서드
// list.set(index, 선언한 자료형에 맞는 값);
// 인덱스 번호를 통해 값을 수정 할 수 있다.
list.set(0, 15);
list.set(0, 25);
list.set(0, 35);

// List 배열 안에 값 삭제하기
// list.remove(index);
// 인덱스 번호를 통해 값을 삭제 하는 메서드
list.remove(0);
list.remove(1);
list.remove(2);

// List 배열 안에 값 전체 삭제하는 메서드
list.clear(); // 전체 값 제거

List(ArrayList)의 주의점으로는 remove메서드를 이용해 값을 지울 때는 맨 마지막에 삽입 된 값이 앞으로 밀린다.

( 즉, index의 번호 또한 앞으로 밀리기 때문에 이 점을 주의해주면 좋다. )

2. LinkedList

1. 메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 값을 담아놓는다.

2. 실제 값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조이다.

3. List(ArrayList)와 같이 순서를 보장해주는 배열이다.

장점  : 값을 추가하거나, 삭제할때는 빠르다.

         : 값을 추가 시 index 사이에도 값을 넣을 수 있다. ( 밑에 예제 코드로 확인 )

단점  : LinkedList는 값을 여기저기 나누어서 담다보니까 조회하는 속도가 느린편이다.

// LinkedList의 선언 및 생성
LinkedList<Integer> list = new LinkedList<>();

// 값 추가 메서드
list.add(10);
list.add(20);
list.add(30);

// index를 이용해 사이에 값 추가 메서드
// list.add(index, 자료형에 맞는 값);
list.add(2, 99); // 결과 => 10, 20, 99, 30 => 중간에 넣는게 가능하다는 장점이있다.

// 값 조회 메서드 => 마찬가지로 index를 통해 조회를 한다.
list.get(0);
list.get(1);
list.get(2);
list.get(3);

// 값 수정 메서드
list.set(1, 77); // set메서드를 이용해 index와 자료형에 맞는 값을 넣어주면 수정이 된다.

// 값 삭제하기
list.remove(1); // index의 번호를 이용해 값을 삭제하며 뒤의 값들이 앞으로 당겨진다.
// 앞에 List와 마찬가지로 인덱스가 당겨진다.

// 값 전체삭제
list.clear();

 

3. Stack 

Stack은 이름 그대로 수직으로 값을 쌓아놓고, 제일 마지막에 들어간 값이 제일 먼저 나오는 자료구조이다.

예시를 들자면 프링글스통에 과자를 넣고 위에서 부터 빼는 느낌이다. ( 통에 넣고 빼는 느낌 )

이 Stack을 사용하는 이유는 최근 저장된 데이터를 나열하고 싶을때 사용한다.

// 선언 및 생성
Stack<Integer> stack = new Stack<>();

// 값 넣기
stack.push(10);
stack.push(20);
stack.push(30);

// 값 뽑기 => 말 그대로 stack에 이 메서드는 값을 진짜 빼버린다.
// 즉, 조회를 해서 확인을 하면 그 값은 배열에서 완전히 빠져나와버린다.
// stack은 마지막에 넣은게 제일 먼저 빠져나오는 구조라 index로 빼오는게 불가능하다.
// 즉, 원하는 값을 가지고오고 싶다면 반복문이나 하나씩 빼는 방법밖에 없다.
stack.pop() // 그냥 뽑는 방법

while(!stack.isEmpty()){   // 반복문을 이용해 값 전체를 뽑는 방법
	System.out.println(stack.pop());
}

// 배열 사이즈 조회
stack.size()

// 값 조회 // => 값 확인만 하고 제거하지는 않는다.
stack.peek(); // 마지막 값 확인 가능
stack.peek(); // 마지막 전 값 확인 가능

# 오늘의 회고

오늘 배운 자바의 컬렉션은 총 List, Map, Queue, Set인데 시간이 부족해서 List의 관한 내용만 적게 되었다.

Map, Queue, Set을 복습 후 다시 적어야 될 것 같다.

평소엔 List만 쓰다가 컬렉션의 다른 객체들을 공부를 해보니 신선하고 좋은 경험인 것 같다.

기억에 많이 남도록 앞으로도 많이 응용을 해보도록 하자.

'⛺스파르타코딩클럽' 카테고리의 다른 글

내일배움캠프 10일차 TIL - 예외(Exception)  (2) 2024.04.25
내일배움캠프 9일차 TIL - 클래스(Class)  (3) 2024.04.25
내일배움캠프 7일차 TIL - 배열(Array)  (0) 2024.04.23
내일배움캠프 6일차 TIL - 변수(Variable)  (1) 2024.04.22
내일배움캠프 5일차 TIL( 웹 서비스 )  (1) 2024.04.19
'⛺스파르타코딩클럽' 카테고리의 다른 글
  • 내일배움캠프 10일차 TIL - 예외(Exception)
  • 내일배움캠프 9일차 TIL - 클래스(Class)
  • 내일배움캠프 7일차 TIL - 배열(Array)
  • 내일배움캠프 6일차 TIL - 변수(Variable)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (159)
      • 🎓방송통신대학교 (26)
        • 🖥️컴퓨터과학과 (1)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • ⚙️컴퓨터의 이해 (11)
        • 🏛️세계의정치와경제 (3)
      • 🛠️Backend (56)
        • 📚백엔드 공부 (4)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚡Python (13)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • 📜HTTP (7)
      • 🚀DevOps (1)
      • Data Structure (1)
      • ⛺스파르타코딩클럽 (65)
      • 정보 (1)
      • 정리가 필요한 글 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    유비쿼터스 컴퓨팅개론
    방통대
    입출력
    세계화
    컴파일러
    Java
    자바
    유비쿼터스
    스프링
    클라우드
    spring
    다형성
    컴퓨터의 이해
    Spring Framework
    유비쿼터스 컴퓨팅
    방송통신대학교
    Python
    방송대
    클래스
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
내일배움캠프 8일차 TIL - 컬렉션(Collection)
상단으로

티스토리툴바