java
-
컬렉션 - MAP 출력 방법백엔드/자바 2020. 8. 17. 02:25
컬렉션에서 List와 Set은 데이터를 읽어오기가 간편하다. 반면 Map의 경우 데이터가 키(key), 값(value)로 나뉘다보니 상대적으로 읽기가 까다롭다. 그래서 이번 포스트에선 Map 데이터를 읽어오는 방법에 대해 정리하고자 한다. forEach + keySet( ) 이용하기 keySet( ) 함수를 이용해서 key만 따로 Set 형태로 저장한다. 그 뒤 for-each 문을 이용해서 추출한 key를 get( ) 메서드를 써서 값(value)을 얻어내면 된다. public static void main(String[] args) { Map player = new TreeMap(); player.put("야구", "류현진"); player.put("축구", "손흥민"); player.put("피겨"..
-
컬렉션 Map - TreeMap백엔드/자바 2020. 8. 17. 01:45
TreeMap이란? TreeMap은 Map 인터페이스를 구현한 클래스다. TreeMap은 키(key), 값(value)로 이뤄진 Entry객체를 이진탐색트리 형태로 저장한다. TreeSet과의 차이라면, TreeSet은 일반객체를 저장하고 TreeMap은 Entry객체를 저장한다. HashMap과의 차이라면, HashMap은 해싱을 통해 해시테이블(배열+연결리스트) 형태로 Entry객체를 저장한다. 반면, TreeSet은 이진 탐색 트리 형태로 Entry객체를 저장한다. 일반 탐색은 HashMap이 TreeMap에 비해 유리하고, TreeMap은 범위탐색, 정렬에 유리하다. TreeMap사용하기 TreeMap은 이전에 올린 HashMap과 큰 차이가 없다. 또한 이진 탐색 트리로 자료가 저장되므로, 범위..
-
컬렉션 Map - HashMap백엔드/자바 2020. 8. 17. 00:58
HashMap이란? Map 인터페이스를 구현한 클래스로 Map의 특징을 그대로 갖는다. Map은 키(key)와 값(value) 한쌍으로 구성된 자료구조를 말한다. HashMap은 해싱 기법을 사용해 Map의 형태로 자료를 저장하게 된다. 이때 Map의 형태로 저장할 때 key객체와 value객체를 멤버로 가진 Entry 객체를 이용한다. 간단히 저장되는 방식을 그림을 보자면 아래와 같다. 데이터를 Map의 형태로 저장하면 위 그림처럼 키, 값으로 나눠진다. (HashMap 뿐 아니라 TreeMap도 위와 같은 방식으로 객체에 데이터를 저장한다.) 이때 알아둬야 할 것은 값(value)는 중복되어도 상관없지만, 키(key)는 중복되선 안된다. 만약 키가 중복될 경우에는 기존에 있던 키의 값은 새로 입력한 ..
-
컬렉션 Set - TreeSet백엔드/자바 2020. 8. 16. 06:08
TreeSet이란? Set의 인터페이스를 구현한 컬렉션 클래스다. 이진 탐색 트리(binary search tree)라는 자료구조 형태로 데이터를 저장한다. 그리고 당연히 Set 인터페이스를 구현했기에 중복을 허용하지 않는다. 또한 이진검색트리 구조에 맞게 정렬된 상태로 데이터가 저장되므로 저장 순서를 유지하지도 않는다. 즉 내부적으로 데이터 정렬은 가능하지만, 사용자의 데이터 입력 순으로 저장 순서가 유지되진 않는다. 이진 트리(binary tree)란? 이진 트리란 루트에서 시작하여 한 개 부모 노드에 최대 2개의 자식 노드를 붙일 수 있게 설계된 데이터를 저장할 수 있는 자료 구조를 말한다. 그림으로 보는게 더 이해하기 쉽다. 루트를 기준으로 여러 개의 요소(노드, node)가 서로 연결된 구조다...
-
컬렉션 Set - HashSet백엔드/자바 2020. 8. 16. 05:55
HashSet이란? Set 인터페이스를 구현한 가장 대표적인 컬렉션이다. List와 반대로 저장 순서를 보장하지 않고, 중복을 허용하지 않는다. 만약 Set인터페이스에 속한 클래스를 쓰면서 저장 순서를 유지하고 싶다면, LinkedHashSet을 쓰면 된다. HashSet과 TreeSet의 차이 Set 인터페이스에서는 HashSet과 TreeSet이 가장 대표적인 클래스다. HashSet의 Set 인터페이스의 특성대로 순서를 보장하지 않고, 중복을 허용하지 않는다. TreeSet은 범위 검색, 정렬에 특화된 클래스다. 같은 자료를 담더라도 TreeSet은 데이터 범위 검색, 정렬에서 장점을 가진다. 하지만 TreeSet은 HashSet에 비해 데이터의 추가, 삭제가 느린 단점이 있다. 그래서 본인의 용도..
-
컬렉션 List - LinkedList백엔드/자바 2020. 8. 16. 03:57
연결리스트(LinkedList)의 등장 배경 기존의 ArrayList의 경우 이전 글에서 언급했듯이 단점이 존재한다. 우선 배열이 확장될 때마다 새로운 배열을 생성해서 복사하는 과정을 지속한다. 그렇다보니 실행 속도에서 손해를 본다. 만약 배열 크기를 미리 크게 잡으면 메모리 낭비가 생긴다. 또한 배열의 중간 데이터를 추가, 삭제할 경우 데이터 이동이 일어나 실행 시간이 오래 걸린다. ArrayList는 배열을 기반으로 하다보니 ArrayList 또한 배열의 단점을 그대로 가져간다. 이러한 ArrayList의 단점을 보완하는것이 연결리스트(LinkedList)다. 연결리스트(LinkedList)란? 연결리스트란 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성된 리스트를 말한다. 이렇게 ..
-
컬렉션 List - ArrayList백엔드/자바 2020. 8. 16. 03:17
ArrayList의 정의와 장점 컬렉션 프레임워크에서 가장 많이 사용되는 클래스로서 List 인터페이스를 구현한 클래스다. List 인터페이스를 구현했기에 데이터를 저장할 때 저장 순서가 유지되고 데이터 중복을 허용한다. 간단히 생각하면 우리가 배운 배열의 업그레이드 판이라고 생각하면 편하다. 실제로도 데이터의 저장공간으로 배열을 사용하며 배열을 기반으로 한다. ArrayList는 미리 배열의 크기를 입력할 필요가 없고 (물론 미리 입력해서 크기를 지정할 수 있지만, 그 크기를 초과해도 자동으로 배열을 확장해준다.) 한 개의 ArrayList에 다양한 자료형을 동시에 저장할 수 있다. ArrayList의 자료 저장 및 삭제 방식 ArrayList는 객체(Object) 배열을 이용해 데이터를 순차적으로 저..
-
오토박싱과 언박싱 (autoboxing & unboxing)백엔드/자바 2020. 8. 14. 17:57
오토박싱과 언박싱의 필요성 JDK 1.5 기본자료형과 참조형 간의 연산이 불가능했다. 그래서 기본형을 항상 래퍼클래스로 만들어서 연산해야 했다. 하지만 이제는 그럴 필요가 없다. 컴파일러가 알아서 해주기 때문이다. 이 과정을 거치는 것을 오토박싱, 언박싱이라 한다. 그리고 이 둘은 정반대의 기능을 한다. 오토박싱과 언박싱이란? 오토박싱 (기본형 값을 래퍼클래스의 객체 즉 참조 자료형으로 바꿔주는 것) 우리가 기본형으로 데이터를 입력했을 때, 이 자료가 참조형 자료로 바뀔 필요가 있을 경우 컴파일러가 알아서 바꿔주는 것을 오토박싱(autoboxing)이라 한다. 언박싱 (우리가 래퍼클래스의 객체 즉 참조 자료형을 기본형으로 바꿔주는 것) 우리가 참조형으로 데이터를 입력했을 때, 이 자료가 기본형 자료로 바..