취업대비반 4일차(List,Set,Map,HashMap/Parameter,Argument)

LeeJaewon·2023년 3월 30일
0

List, Set, Map, HashMap의 차이에 대해서 설명해주세요.

List, Set, Map 및 HashMap은 서로 다른 용도로 사용되는 computer science의 데이터 구조입니다.
List와 Set은 요소 모음을 저장하는 데 사용되는 반면 Map은 키-값 쌍을 저장하는 데 사용됩니다. HashMap은 해시 테이블을 사용하여 키-값 쌍을 저장하고 일반적으로 Java 애플리케이션에서 사용되는 Map 인터페이스의 특정 구현입니다.

  • List:
    List는 정렬된 요소 모음이며 각 요소는 해당 인덱스로 액세스할 수 있습니다. List는 중복을 허용하고 요소를 추가, 제거 또는 수정할 수 있습니다. Java에서 가장 일반적으로 사용되는 List 구현은 ArrayList 및 LinkedList입니다.
  • Set:
    Set은 각 요소가 고유한 정렬되지 않은 요소 모음입니다. Set은 중복을 허용하지 않으며 요소를 추가하거나 제거할 수 있습니다. Java에서 가장 일반적으로 사용되는 Set 구현은 HashSet 및 TreeSet입니다.

HashSet과 TreeSet의 차이점

HashSet과 TreeSet은 모두 Java에서 Set 인터페이스를 구현한 것입니다. 그러나 두 데이터 구조 간에는 몇 가지 중요한 차이점이 있습니다.

정렬: HashSet과 TreeSet의 주요 차이점 중 하나는 HashSet은 요소의 순서를 유지하지 않는 반면 TreeSet은 기본적으로 요소를 오름차순으로 정렬한다는 것입니다. Set의 요소를 정렬해야 하는 경우 TreeSet이 더 나은 옵션입니다.
성능: HashSet은 일반적으로 대부분의 작업에서 TreeSet보다 빠릅니다. 이는 HashSet이 요소를 저장하기 위해 해시 테이블을 사용하기 때문입니다. 이는 요소가 Set에 있는지 추가, 제거 및 확인하기 위한 일정한 시간 성능을 제공합니다. 반면에 TreeSet은 자체 균형 이진 검색 트리를 사용하여 요소를 저장하므로 일부 작업의 경우 속도가 느려질 수 있습니다.
중복: HashSet은 중복을 허용하지만 TreeSet은 허용하지 않습니다. 세트에 중복이 없는지 확인하려면 TreeSet이 더 나은 선택입니다.
Null 값: HashSet은 단일 null 값을 추가할 수 있는 반면 TreeSet은 null 값을 전혀 허용하지 않습니다.

요약하면 요소의 순서를 유지하거나 고유성을 적용하는 Set이 필요한 경우 TreeSet이 더 나은 선택입니다. 대부분의 작업에 더 빠른 성능을 제공하거나 null 값을 허용하는 Set이 필요한 경우 HashSet이 더 나은 선택입니다.

  • Map:
    Map은 각 키가 고유하고 해당 값에 액세스하는 데 사용되는 키-값 쌍의 모음입니다. Map은 중복 키를 허용하지 않지만 중복 값은 허용합니다. 요소를 추가, 제거 또는 수정할 수 있습니다. Java에서 가장 일반적으로 사용되는 Map 구현은 HashMap 및 TreeMap입니다.
  • HashMap:
    HashMap은 해시 테이블을 사용하여 키-값 쌍을 저장하는 Map 인터페이스의 특정 구현입니다. null 키와 null 값을 허용하지만 해당 요소의 순서는 유지하지 않습니다. HashMap은 일반적으로 Java에서 가장 빠른 Map 구현이며 많은 애플리케이션에서 널리 사용됩니다.
    HashMap 시간 복잡도 O(1) , 해시함수를 사용해서 키를 만든다

HashMap과 TreeMap의 차이점

HashMap과 TreeMap은 Java에서 널리 사용되는 두 가지 Map 인터페이스 구현입니다. 두 데이터 구조 모두 키-값 쌍을 저장할 수 있지만 둘 사이에는 몇 가지 차이점이 있습니다.

정렬: HashMap과 TreeMap의 주요 차이점 중 하나는 HashMap은 요소의 순서를 유지하지 않는 반면 TreeMap은 키의 자연스러운 순서를 기반으로(또는 사용자 정의 비교기를 사용하여) 요소를 정렬한다는 것입니다. Map의 키를 정렬해야 하는 경우 TreeMap이 더 나은 옵션입니다.
성능: HashMap은 일반적으로 대부분의 작업에서 TreeMap보다 빠릅니다. 이는 HashMap이 요소를 저장하기 위해 해시 테이블을 사용하기 때문에 요소를 추가, 제거 및 액세스하기 위한 일정한 시간 성능을 제공합니다. 반면에 TreeMap은 자체 균형 이진 검색 트리를 사용하여 요소를 저장하므로 일부 작업의 경우 속도가 느려질 수 있습니다.
Null 키: HashMap은 하나의 null 키를 추가할 수 있지만 TreeMap은 null 키를 전혀 허용하지 않습니다.
메모리 사용량: HashMap은 일반적으로 동일한 수의 요소를 저장하기 위해 TreeMap보다 적은 메모리를 사용합니다. 이는 TreeMap이 자체 균형 이진 검색 트리 구조를 위한 추가 정보를 저장해야 하기 때문입니다.
반복: TreeMap은 자체 균형 이진 검색 트리를 통과해야 하므로 일반적으로 TreeMap의 요소를 반복하는 것은 HashMap의 요소를 반복하는 것보다 느립니다.

키 순서를 유지하거나 고유성을 적용하는 맵이 필요한 경우 TreeMap이 더 나은 선택입니다. 대부분의 작업에 더 빠른 성능을 제공하거나 null 키를 허용하는 맵이 필요한 경우 HashMap이 더 나은 선택입니다.

해시충돌 회피방법
대표적으로 Open AddressingSeparate Chaining이 있다.
첫 번째로 Open Addressing은 해시 충돌이 발생하면 다른 해시버킷에 해당 자료를 삽입하는 방식이다.
두 번째인 Separate Chaining은 충돌 시 해당 버킷값을 첫 부분으로 하는 링크드 리스트로 해결한다.
첫 번째인 Open Addressing은 데이터 개수가 적다면 Separate chaining보다 더 성능이 좋다. 하지만 배열의 크기가 커질수록(M값) 연속된 공간에 데이터를 저장하여 캐시효율이 높다는 장점이 사라지게 되어 Separate chaining을 사용하는 것이 더 현명 해 보인다.

Parameter와 Argument의 차이에 대해 설명해주세요.

프로그래밍에서 "Parameter"와 "Argument"라는 용어는 종종 같은 의미로 사용되지만 실제로는 다른 의미를 갖습니다.

  1. Parameter:
    Parameter는 함수 또는 메소드 정의의 일부로 선언되는 변수입니다. 함수가 호출될 때 입력으로 받을 것으로 예상하는 값을 나타냅니다. Parameter는 함수 또는 메소드가 허용할 수 있는 입력 유형 및 수를 정의합니다.

    예를 들어, 다음 함수 정의에서 "x" 및 "y"는 매개변수입니다.

  2. Argument:
    Argument는 함수나 메서드가 호출될 때 전달되는 값입니다. 함수를 실행하는 데 사용되는 실제 입력 값을 나타냅니다. Argument의 수와 유형은 함수 또는 메소드에 정의된 Parameter와 일치해야 합니다.

    예를 들어, 다음 함수 호출에서 "2"와 "3"은 인수입니다.

    이 경우 결과를 계산하는 데 사용될 두 개의 인수(2 및 3)와 함께 함수 add()가 호출됩니다.

요약하면 매개변수는 함수 또는 메서드 정의에서 선언된 변수이고 인수는 함수 또는 메서드가 호출될 때 전달되는 실제 값입니다. 인수의 수와 유형은 함수 또는 메소드에 정의된 매개변수와 일치해야 합니다.

자바는 콜바이밸류만 가능
함수에 파라미터가 많아진다면 어떤 방식으로 코딩을 할 지?

추가 공부할 것

Q. Set 에서 집합을 만들 때 차집합(합집합, 교집합)을 만들려고 하면 어떤 함수를 사용하는지?

해시함수의 알고리즘은?

참고 : https://d2.naver.com/helloworld/831311

profile
한 걸음 한 걸음 꾸준히

0개의 댓글