의문점 공부하기/📌 Java 54

📌 ArrayList와 Vector의 차이점은!?

스레드 안전성: Vector: 스레드 안전(thread-safe)한 클래스로 구현되어 있다. =>Vector가 여러 스레드에서 동시에 접근되더라도 안전하게 작동 ArrayList: 스레드 안전하지 않은 클래스로 구현되어 있다. => ArrayList는 단일 스레드 환경에서 사용하는 것이 가장 좋다. 성능: Vector는 스레드 안전성을 유지하기 위해 동기화(synchronization)를 사용. => 여러 스레드에서 Vector에 접근할 때 성능이 저하될 수 있다. ArrayList는 스레드 안전성을 고려하지 않기 때문에 동기화 오버헤드가 없으므로 일반적으로 더 빠르다 용량 증가: ArrayList는 요소가 추가될 때 내부 배열의 크기를 동적으로 증가 시킨다 , 기본적으로 현재 크기의 50%씩 증가 Ve..

📌 Array에서 List로 전환하려면 어떻게 해야할까?

Arrays 클래스의 asList() 메서드를 사용하기: - Arrays 클래스의 asList() 메서드를 사용하여 배열을 리스트로 변환 - java.util 패키지의 Arrays 클래스를 import 해야 한다 import java.util.Arrays; import java.util.List; public class ArrayToListExample { public static void main(String[] args) { String[] array = {"apple", "banana", "orange"}; List list = Arrays.asList(array); System.out.println(list); } } ArrayList 생성자를 사용하기: java.util 패키지의 ArrayLis..

📌 ArrayList와 LinkedList의 차이점은 무엇일까?

ArrayList: - 데이터를 배열로 관리 - 데이터의 추가, 삭제를 위해 임시 배열을 생성하고 데이터를 복사하는 방식을 사용 - 데이터는 인덱스를 가지고 있어 한 번에 참조가 가능하므로 검색에 유리 - 대량의 자료를 추가 또는 삭제하는 경우에는 데이터의 복사가 많이 일어나 성능 저하를 일으킬 수 있다 LinkedList: - 데이터는 각각의 노드로 구성되며, 노드는 데이터와 다음 노드를 참조하는 포인터로 이루어져 있다 - 데이터의 추가, 삭제 시에는 이전 노드와 다음 노드의 참조만 변경하면 되므로 ArrayList에 비해 빠름 - 데이터의 검색 시에는 처음부터 노드를 순회해야 하므로 ArrayList에 비해 성능상 불리 ▼ 데이터의 추가, 삭제가 빈번하게 발생하는 경우에는 LinkedList를 사용하..

📌 HashSet 구현 원칙은 무엇일까?

HashSet은 내부적으로 HashMap을 사용하여 요소를 저장한다 HashSet의 요소는 HashMap의 키로 저장되며, 모든 요소의 값은 동일한 객체로 설정되고, 이를 통해 HashSet은 중복된 요소를 허용하지 않는다 해시 함수 사용: HashSet은 해시 함수를 사용하여 요소를 저장 해시 함수는 요소의 해시 코드를 계산하고, 해당 코드를 기반으로 요소를 저장할 위치를 결정, 이를 통해 데이터를 빠르게 찾을 수 있다. 중복 요소 제거: HashSet은 중복된 요소를 허용하지 않아서, 이미 HashSet에 존재하는 요소를 추가하려고 하면, 추가되지 않는다. 순서 없음: HashSet은 순서를 유지하지 않는다. 따라서 요소의 순서에 의존하지 않는 작업을 수행해야 하고, 만약 순서가 필요하다면, Hash..

📌 HashMap 구현 원칙은 무엇일까?

해시 함수 사용: HashMap은 해시 함수를 사용하여 키(key)를 해시 코드로 변환한다. 해시 코드는 내부 배열에서 저장 위치를 결정하는 데 사용 해시 함수는 키의 분포를 고려하여 고르게 분산된 해시 코드를 생성해야 한다 Java에서는 hashCode() 메서드를 사용하여 객체의 해시 코드를 계산한다 해시 충돌 처리: 해시 함수는 서로 다른 키들이 동일한 해시 코드를 가질 수 있기 때문에 해시 충돌이 발생할 수 있다. HashMap은 내부적으로 해시 충돌을 처리하기 위해 체이닝(Chaining) 방식을 사용- 체이닝은 동일한 해시 코드를 가진 키들을 연결 리스트로 연결하여 충돌을 해결 충돌이 발생한 버킷의 연결 리스트가 일정 길이 이상이 되면 연결 리스트 대신 트리(이진 검색 트리)로 변환하여 검색 ..

📌 그렇다면 각각 어떤 상황에서 HashMap과 TreeMap을 선택하는가?!

HashMap: 빠른 검색 및 삽입: HashMap은 해시 함수를 사용하여 키-값 쌍을 저장하므로, 키를 기반으로 빠른 검색과 삽입이 가능해시 함수의 성능에 따라 검색 및 삽입 성능이 달라질 수 있다. 정렬된 순서 필요 없음: HashMap은 키의 순서를 보장하지 않음, 키-값 쌍이 삽입된 순서에 따라 저장되지만, 순서를 유지하지 않아, 정렬된 순서가 필요하지 않은 경우에 적합 중복된 키 허용하지 않음: HashMap은 중복된 키를 허용하지 않음, 동일한 키로 여러 값을 저장하려고 하면 마지막으로 삽입된 값으로 덮어씌워진다 TreeMap: 정렬된 순서 필요: TreeMap은 이진 검색 트리를 기반으로 키-값 쌍을 저장하며, 키를 기준으로 정렬된 순서를 유지 => 정렬된 순서가 필요한 경우에 적합 범위 검..

📌 HashMap과 Hashtable의 차이는?!

HashMap과 Hashtable은 모두 Map 인터페이스를 구현한 자료구조이지만, 차이점이 존재!! 1. 동기화(Synchronization): Hashtable은 동기화되어 스레드 안전 자료구조, 여러 스레드가 동시에 Hashtable에 접근하더라도 내부적으로 동기화되어 안전한 작업을 보장 HashMap은 동기화되지 않아 스레드 안전성을 보장하지 않음, = HashMap은 단일 스레드 환경에서 사용하기에 적합. 2. Null 허용: Hashtable은 키(key)와 값(value)으로 null을 허용하지 않음, Hashtable에 null을 넣으려고 하면 NullPointerException이 발생 HashMap은 키와 값 모두 null을 허용, HashMap이 더 유연하게 사용될 수 있음을 의미 3..

📌 List, Set, Map의 차이점은!?

▶List : - 순서가 있는 데이터의 집합, 데이터를 추가한 순서대로 저장하며 중복된 데이터를 허용 - 데이터에 접근할 때는 인덱스(0부터 시작)를 사용하여 요소에 접근 가능 ArrayList, LinkedList 등의 구현체가 존재 ▶Set : - 순서가 없는 데이터의 집합, 데이터를 추가한 순서와는 관계없이 저장하며, 중복된 데이터를 허용하지 않음 - 데이터의 유일성을 보장하기 위해 사용 - HashSet, TreeSet 등의 구현체가 존재 ▶Map : - Key-Value 쌍으로 데이터를 저장, 각각의 Key는 유일해야 하며, Value는 중복 가능 - Key를 통해 값을 검색하고, Key-Value 쌍을 추가하거나 삭제할 수 있다 - HashMap, TreeMap 등의 구현체가 있습니다. Lis..

📌 Collection과 Collections의 차이는 무엇일까?

Collection과 Collections의 차이는 Collection - Collection은 자바 컬렉션 프레임워크의 인터페이스 - 이 인터페이스는 여러 객체를 저장하고 관리하는 데 사용된다 - Collection은 객체들을 단순히 그룹화하고, 중복을 허용하며, 순서를 유지하지 않는 컬렉션을 나타낸다. - Collection은 다양한 하위 인터페이스를 가지고 있으며, 가장 일반적인 하위 인터페이스로는 List, Set, Queue 등이 있다. Collections - Collections는 자바의 유틸리티 클래스 - 이 클래스는 자바 컬렉션 프레임워크를 사용하여 작업을 수행하는 데 도움이 되는 메서드를 제공 - Collections 클래스에는 컬렉션을 정렬, 검색, 조작하는 데 사용되는 다양한 메서드..

📌 자바 컨테이너란 무엇일까?

▶컨테이너란? 컴포넌트를 포함 할 수 있는 특별한 GUI 컴포넌트 -> 자바 GUI 응용 프로그램의 화면은 GUI 컴포넌트 들로 구성, 역할에 따라 컨테이너와 순수 컴포넌트로 분류, 다른 GUI 컴포넌트를 포함 할 수있는 컴포넌트를 컨테이너라 칭함 컨테이너가 되기 위해선 java.awt.Container 클래스를 상속받아야 한다 container 클래스는 java.awt.Component를 상속받기에 컨테이너 또한 컴포넌트다,,! => 컨테이너는 다른 컨테이너에 컴포넌트로 포함 될 수 있다