[Collection] Comparable, Comparator 알아보기
·
Java/Collection
순수 자바 프로젝트로 카드게임을 프로그래밍 하던 중, 카드 출력 시 출력 순서에 대한 정렬 방식을 구현해야하는 기능구현 목록이 있었는데, 그 중 학습한 Comparable과 Comparator에 대해서 정리한 내용이다. 먼저 Comparator와, Comparable이 어떤건지 간단하게 먼저 알아보겠다. ComparatorComparator(비교자)는 정렬을 할 때 비교할 기준을 직접 제공하는 인터페이스이다. Comparator는 @FunctionalInterface이다. 그러므로 람다식이나 메서드 레퍼런스 방식으로 사용이 가능하며, String,Integer와 같은 기본 타입 같은 경우 그냥 호출해서 사용할 수 있다.@FunctionalInterface public interface Comparator..
[Collection] Iterator와 Iterable
·
Java/Collection
자바의 여러가지 컬렉션 프레임워크에 대해서 공부하면서 궁금한 점이 생겨서 배운점들을 토대로 글을 정리해보려고 한다. 자바에서 지원하는 여러 자료구조들이 존재하는데, 각각의 자료구조마다 데이터를 접근하여 순회하는 방법이 달랐다. 크게 List, Set, Map에 대해서 살펴보자.Listpublic class Main { public static void main(String[] args) { List list = new ArrayList(); //list.add() 생략 for (Integer integer : list) { System.out.println(integer); } for (int i = 0; i List..
[Collection] Java의 Map
·
Java/Collection
Map의 특징Map은 키-값 쌍을 저장하는 자료구조이다.Key는 Map내에서 유일해야 한다.Key는 중복될 수 없지만 값은 중복될 수 있다.Key를 통해 원하는 값을 빠르게 검색할 수 있다.Map은 순서를 유지하지 않는다.자바의 Map은 HashMap, TreeMap, LinkedHashMap등 다양한 Map 구현체를 제공한다. 이들은 Map 인터페이스의 메서드를 구현하며, 각기 다른 특성과 성능 특징을 가지고 있다.  Map에서 같은 키를 가지고 데이터를 저장할 경우package collection.map; import java.util.HashMap; import java.util.Map; public class MapMain3 { public static void main(String..
[Collection] Java의 Set과 hashCode()
·
Java/Collection
SetSet란 유일한 요소들의 컬렉션이다.중복된 요소를 허용하지 않으며, 요소를 추가할 때 이미 존재하는 요소는 무시된다.그리고 순서를 보장하지 않기 때문에 출력시 입력 순서와 다를 수 있다.셋은 요소의 유무를 빠르게 확인할 수 있도록 최적화 되어있다. 이는 데이터의 중복을 방지하고 빠른 조회를 가능케한다.add()로 데이터를 추가할 때 Set에 중복되어있는 데이터가 있는지 항상 확인해야한다. 따라서 처음에 데이터를 추가할 때는 O(1)이지만 그 이후로는 중복된 데이터가 있는지 찾기 때문에 O(n)이다.  중복 데이터 검색 O(n) + 데이터 입력 O(1)= O(n).contains() 로 데이터를 찾을 때는 배열에 있는 모든 데이터를 찾고 비교해야 하므로 평균 O(n)이 걸린다. 즉 데이터를 추가할 때..
[Collection] Java의 TreeSet의 특징 및 구조
·
Java/Collection
TreeSetTreeSet은 이진 탐색 트리를 개선한 레드 - 블랙 트리를 내부에서 사용한다. TreeSet의 특징순서 : 요소들은 정렬된 순서로 지정된다. 순서의 기준은 Comparator로 변경할 수 있다.시간 복잡도: 주요 연산들은 O(log n) 의 시간 복잡도를 가진다. 따라서 HashSet 보다는 느리다.용도: 데이터들을 정렬된 순서로 유지하면서 집합의 특성을 유지해야 할 때 사용한다.예를 들어, 범위 검색이나 정렬된 데이터가 필요한 경우에 유용하다. 참고로 입력된 순서가 아니라 데이터 값의 크고 낮음으로 정렬이 된다. 예를 들어 3, 1, 2를 순서대로 입력해도 1,2,3, 순서로 출력된다.트리의 구조TreeSet은 내부적으로 트리 구조(정확히는 이진 탐색 트리의 일종인 레드-블랙 트리)를 ..
[Collection] 자바의List 그리고 ArrayList,LinkedList 실제 성능 테스트
·
Java/Collection
List데이터의 순서를 보장하고, 중복을 허용하는 자료구조를 List라고 한다. List 는 객체들의 순서가 있는 컬렉션을 나타내며, 같은 객체의 중복 저장을 허용한다. 이 리스트는 배열과 비슷하지만, 크기가 동적으로 변화하는 컬렉션을 다룰 때 유연하게 사용할 수 있다. 자바의 컬렉션 프레임워크가 제공하는 가장 대표적인 자료 구조가 바로 리스트이다. 리스트와 관련된 컬렉션 프레임워크는 다음 구조를 가진다. Collection 인터페이스는 java.util 패키지의 컬렉션 프레임워크의 핵심 인터페이스 중 하나이다. 이 인터페이스는 자바에서 다양한 컬렉션, 즉 데이터 그룹을 다루기 위한 메서드를 정의한다. Collection 인터페이스는 List , Set , Queue 와 같은 다양한 하위 인터페이스와 함..
[Collection] Java의 Node, LinkedList
·
Java/Collection
Node의 특징Node란 서로의 메모리 주소를 참조하는 형태로 이루어진 자료구조이다.Node는 인덱스를 통해 추가 및 삭제 시 위치를 O(n)으로 찾지만, 찾은 이후에는 일부 Node의 참조값만 변경하면 되므로 해당 부분이 O(1)로 빠르다.앞에 추가하는 경우 : 연결리스트는 배열리스트 처럼 추가한 항목의 오른쪽에 있는데이터를 밀지 않고 참조값만 변경하면 되므로 데이터를 앞쪽에서 추가하는 경우 연결리스트가 보통 더 좋은 성능을 제공한다마지막에 데이터를 추가하는 경우 : 노드를 마지막까지 순회해야 마지막 노드를 찾을 수 있다. 따라서 마지막 노드를 찾는데 O(n)의 시간걸린다, 데이터를 추가하는 경우 일부 노드의 참조만 변경하면 된다. O(1), 따라서 O(n)의 성능을 제공한다.ArrayList와의 차이..
[Collection] Java의 배열과, ArrayList
·
Java/Collection
배열의 특징배열은 Java가 지원하는 CollectionFramework중의 하나로 데이터의 중복저장을 허용하고, 순서를 보장하는 Collection이다.배열에서 자료를 찾을 때 Index를 사용하면 매우 빠르게 자료를 찾을 수 있으며, Index를 통한 입력 및 변경, 조회의 경우 한번의 계산O(1)으로 자료의 위치를 찾을 수 있다.  배열이 인덱스의 위치를 찾는 방법arr[2]에 위치한 자료를 찾는다고 가정해보자.Array는 메모리상에 순서대로 붙어서 존재하게 된다.int는 4byte를 차지한다 -> 따라서 배열의 시작 위치부터 시작해서 자료의 크기(4byte)와 인덱스 번호를 곱하면 원하는 메모리 위치를 찾을 수 있다.배열의 시작 참조 위치 + 자료의 크기 + 인덱스 위치 = 해당 연산을 통해 값이..
cheolhyeon
'Java/Collection' 카테고리의 글 목록