TIL

TIL - 2024/05/01

기석김 2024. 5. 1. 20:13

배운 내용 🏃

🗳 참조형 분류통으로 정리하기 (컬렉션🧬)

📌 Java 프로그래밍 에서는 배열🗳을 더 고도화

시켜서 컬렉션🧬 이라는 이름으로 참조형 분류통(자료구조)를 제공하 고 있습니다.

컬렉션은 참조형 변수만 저장함으로써 여러 기능을 많이 제공합니다.

컬렉션🧬은 여러가지 종류가 있고,

이러한 컬렉션🧬들은 데이터를 넣고 빼는 방법이 각자 다르기 때문에 용도에 맞 게 사용합니다.

어떤 컬렉션🧬들이 있고 어떻게 사용하는지 학습 해봅시다!

컬렉션🧬 이해하기

• Java 에서 컬렉션🧬은 배열보다 다수의 참조형 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능을 많이 가지고 있다

 컬렉션🧬 기능 : 크기 자동조정/ 추가/ 수정/ 삭제/ 반복/ 순회/ 필터/ 포함확인 등….

 

컬렉션🧬 종류

Collection 에는 List , Set , Queue , Map 이 있다

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

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

First In First Out : 먼저들어간 순서대로 값을 조회할 수 있다. ( 알아두면 좋음)

Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) - 순서없고 중복없는 배열

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

 

 

Collection🧬 은 기본형 변수가 아닌 참조형 변수를 저장한다

 

❓ 자주쓰는 참조형 변수 몇개만 간단히 알아보자!

• int 의 참조형 변수 = Integer

• long 의 참조형 변수 = Long

• double 의 참조형 변수 = Double

• String 은 원래부터 참조형 변수

 

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

 

ArrayList

•  ArrayList 는 배열(Array)처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)로 값을 하나씩 조회할 수 있다.

 

특징

  배열(Array)처럼 크기가 정해져 있지않고 필요할때마다 크기가 점점 더 늘어난다

 

여기서 Quiz~~  Array 와 어떤점이 다르길래 ArrayList 는 크기를 지정하지 않아도 되는건가 ??

 

❓ Array 와 어떤점이 다르길래 ArrayList 는 크기를 지정하지 않아도 되는건가??

먼저, Array 처럼 크기를 고정하여 생성하는 것을 정적배열 이라면
ArrayList 처럼 크기가 가변적으로 늘어나는 것을 동적배열 이라고 한다

Array 은 메모리에 연속된 공간을 요청한 사이즈 만큼 받아서 실제값을 저장하는 기본형 변수로
저장하기 때문에 정적배열이다.

ArrayList 는 생성시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓고, 값이 추가될
때 더 큰 공간이 필요하면 더큰 공간을 받아서 저장하기 때문에 동적배열이다

따라서, 기본형 변수로 저장하는 Array 는 정적배열이고, 참조형 변수로 저장하는 ArrayList 는 동적
배열이라고 기억하면 된다

 

기능

• 선언 : ArrayList intList 형태로 선언한다

생성 : new ArrayList(); 형태로 생성한다

초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없다

값 추가 : intList.add({추가할 값}) 형태로 값을 추가한다

값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정한다

• 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제한다

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

• 전체 제거 : intList.clear() 형태로 전체 값을 삭제한다

 

ArrayList 코드로 알아보자!!

// ArrayList
// (사용하기 위해선 import java.util.ArrayList; 를 추가해야합니다.)
import java.util.ArrayList;

public class Main {
	public static void main(String[] args) {
		ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 및 생성
		intList.add(1);
		intList.add(2);
		intList.add(3);
        
		System.out.println(intList.get(0)); // 1 출력
		System.out.println(intList.get(1)); // 2 출력
		System.out.println(intList.get(2)); // 3 출력
		System.out.println(intList.toString()); // [1,2,3] 출력
        
		intList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(intList.get(1)); // 10 출력
        
		intList.remove(1); // 1번순번의 값을 삭제합니다.
		System.out.println(intList.toString()); // [1,3] 출력
        
		intList.clear(); // 전체 값을 삭제합니다.
		System.out.println(intList.toString()); // [] 출력
        
	}
}

 

LinkedList 

📌 LinkedList 는 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값 으로 목록을 구성하고 저장한다

 

특징

• 기본적인 기능은 ArrayList 와 동일하지만 LinkedList 는 값을 나누어 담기 때문에 모든값을 조회하는 속도가 느립니다. 대신에, 값을 중간에 추가하거나 삭제할때는 속도가 빠르다.

• 중간에 값을 추가하는 기능이 있습니다. (속도 빠름)

 

기능

• 선언 : LinkedList linkedList 형태로 선언한다

• 생성 : new LinkedList(); 형태로 생성한다

• 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없다

• 값 추가 : linkedList.add({추가할 값}) 형태로 값을 추가한다

• 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가한다

• 값 수정 : linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정한다

• 값 삭제 : linkedList.remove({삭제할 순번}) 형태로 값을 삭제한다

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

• 전체 제거 : linkedList.clear() 형태로 전체 값을 삭제한다

 

LinkedList 코드로 알아보자!

// LinkedList
// (사용하기 위해선 import java.util.LinkedList; 를 추가해야합니다.)
import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {
		LinkedList<Integer> linkedList = new LinkedList<>(); // 선언 및 생성
        
		linkedList.add(1);
		linkedList.add(2);
		linkedList.add(3);
        
		System.out.println(linkedList.get(0)); // 1 출력
		System.out.println(linkedList.get(1)); // 2 출력
		System.out.println(linkedList.get(2)); // 3 출력
		System.out.println(linkedList.toString()); // [1,2,3] 출력 (속도 느림)
        
		linkedList.add(2, 4); // 2번 순번에 4 값을 추가합니다.
		System.out.println(linkedList); // [1,2,4,3] 출력
        
		linkedList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(linkedList.get(1)); // 10 출력
        
		linkedList.remove(1); // 1번순번의 값을 삭제합니다.
		System.out.println(linkedList); // [1,4,3] 출력
        
		linkedList.clear(); // 전체 값을 삭제합니다.
		System.out.println(linkedList); // [] 출력
	}
}

마무리🔥

 

배열어렵다 배열을 이용해서 코드를 더 많이 짤 수 있게

연습을 많이 해야될 거 같다