TIL

2023-10-23 TIL(컬랙션)

우성팔 2023. 10. 23.

1. ArrayList

  • 배열(Array)처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)로 값을 하나씩 조회할 수 있습니다.
  • Array처럼 크기를 고정하여 생성하는 것을 정적배열 이라면 ArrayList 처럼 크기가 가변적으로 늘어나는 것을 동적배열 이라고 합니다.

 

  • 기능
    • 선언 : ArrayList<Integer> intList 
    • 생성 : new ArrayList<Integer>(); 
    • 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
    • 값 추가 : intList.add({추가할 값}) 
    • 값 수정 : intList.set({수정할 순번}, {수정할 값}) 
    • 값 삭제 : intList.remove({삭제할 순번}) 
    • 전체 출력 : intList.toString() 
    • 전체 제거 : intList.clear()

2. LinkedList  

  • 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장합니다.
  • 기본적인 기능은 ArrayList 와 동일하지만 LinkedList 는 값을 나누어 담기 때문에 모든값을 조회하는 속도가 느립니다. 대신에, 값을 중간에 추가하거나 삭제할때는 속도가 빠릅니다.

 

  • 기능
    • 선언 : LinkedList<Integer> linkedList
    • 생성 : new LinkedList<Integer>();
    • 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
    • 값 추가 : linkedList.add({추가할 값}) 
    • 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 
    • 값 수정 : linkedList.set({수정할 순번}, {수정할 값})
    • 값 삭제 : linkedList.remove({삭제할 순번})
    • 전체 출력 : linkedList.toString() 
    • 전체 제거 : linkedList.clear() 

3. Stack (Last-In-First-out)

  • 값을 수직으로 쌓아놓고 넣었다가 빼서 조회하는 형식으로 데이터를 관리 합니다.

 

  • 기능
    • 선언 : Stack<Integer> intStack
    • 생성 : new Stack<Integer>(); 
    • 추가 : intStack.push({추가할 값}) 
    • 조회 : intStack.peek() 형태로 맨 위값을 조회합니다.
    • 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고나면 삭제됨)

4. Queue(First In First Out)

  • 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합 입니다.

 

  • 기능
    • 선언 : Queue<Integer> intQueue 형태로 선언합니다.
    • 생성 : new LinkedList<Integer>(); 형태로 생성합니다.
    • 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
    • 조회 : intQueue.peek() 형태로 맨 아래값을 조회합니다.
    • 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냅니다. (꺼내고나면 삭제됨)

5. Set

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

 

  • 기능
    • 선언 : Set<Integer> intSet 
    • 생성 : new HashSet<Integer>();
    • 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
    • 조회 : intSet.get({조회할 순번}) 
    • 삭제 : intSet.remove({삭제할 값})
    • 포함확인 : intSet.contains({포함확인 할 값}) 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받습니다.

6. Map

  •  key-value 구조로 구성된 데이터를 저장할 수 있습니다.

 

  • 기능
    • 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언
    • 생성 : new HashMap<>();
    • 추가 : intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가
    • 조회 : intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회
    • 전체 key 조회 : intMap.keySet() 형태로 전체 key 값들을 조회
    • 전체 value 조회 : intMap.values() 형태로 전체 value 값들을 조회
    • 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제

 


 

중앙값 구하기

import java.util.Arrays;
class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        return array[array.length / 2];
    }
}
def solution(array):
    array.sort()
    answer = array[len(array)//2]
    return answer

자바에도 파이썬과 같은 역할을 하는 sort가 있었다!

 

배열 두배 만들기

public class Solution {
    public static int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        for(int i = 0 ; i < numbers.length ; i++){
            answer[i] = numbers[i] * 2;
        }
        return answer;
    }
}

// return Arrays.stream(numbers).map(i -> i * 2).toArray(); 스트림을 활용한 방법!

//	ArrayList<Integer> answer = new ArrayList<>(); ArrayList를 활용한 방법!

        for(int num : numbers){
            answer.add(num*2);
        }

        return answer;

 

def solution(numbers):
    return [a * 2 for a in numbers]

댓글