본문 바로가기

자료구조

(8)
JAVA Map 키(Key) 값(Value) 정렬 방법과 자동 정렬 예제 자바에서 HashMap에 저장한 데이터를 키(Key) 또는 값(Value)으로 정렬하는 방법을 알아보겠습니다. HashMap 키(Key) 정렬 먼저 HashMap을 키(Key)로 정렬하는 방법을 보겠습니다. HashMap을 정렬하기 위해서는 Arrays.sort 메서드를 사용합니다. Arrays.sort 사용하기 위해서는 java.util.Arrays를 import 해줘야 합니다. HashMap 키 정렬 예제 import java.util.Map; import java.util.HashMap; import java.util.Arrays; public class Main { public static void main(String[] args) { // Map 선언 Map testMap = new HashM..
Collection이란? Collection 이란? Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다. 자바에서의 자료구조 유형은 다음과 같다. - 순서가 있는 목록인 List형 - 순서가 중요하지 않은 목록인 Set형 - 먼저 들어온 것이 먼저 나가는 Queue형 - KEY-VALUE의 형태로 저장되는 Map형 배열과의 차이점은 정적 메모리 할당이 아닌 동적 메모리 할당을 하게 된다. 즉, new int[4]을 하면 4개 공간밖에 못쓰고 미리 선언을 통해 4개의 공간을 만들어야 하지만, collection은 공간이 계속 필요한 만큼 추가될 수 있다. Collection 인터페이스에 선언된 주요 메서드 위의 그림을 ..
HashMap HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다. 여기서 키와 값은 모두 객체입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치됩니다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보입니다. 위 그림과 같이 HashMap은 내부에 '키'와 '값'을 저장하는 자료 구조를 가지고 있습니다. HashMap은 해시 함수..
List, Map, Set 사용 하는 법 List,Set,Map의 Class중 어떤것을 쓸것인지 판단할수 있도록 표로 정리해 보았다. 용어 List : 중복을 허용하고, index를 통한 접근을 한다. index가 부족하게 되면 메모리를 새로 할당하여 복사하여 구성하게 된다. Set : 집합(수학), 집합은 중복을 허용하지 않고 교집합/합집합/차집합등을 지원한다.(And(교집합), OR(합집합), XOR (Not Or)등을 지원함) Hash : Hash Function을 말하며 고유한 Key값(Unique Key)을 주면 고유한 값을 Return한다(중복안됨). Hash연산은 다방면으로 사용되어지고 있다. Linked : Array의 전/후의 값이 서로 Link[양방향연결고리]되어 있어 계속늘어날 수 있으나, 중간검색이 되지 않아 검색속도가 느..
스택이란 Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복..
3 vector와 priority_queue sorting하기 1. vector 내림 차순 : sort(v.begin(), v,end(), greater()); 오름 차순 : sort(v.begin(), v,end()); 2. map 내림 차순 : struct cmp { bool operator()(int n, int m){ return nm; } } or priority_queue q; 3. struct의 값을 비교할때 (priority_queue를 사용해서) #include #include #include using namespace std; typedef struct { int pos1; int pos2; }pos12; struct cmp { bool operator()(pos12 n, pos12 m) { if (n.pos1 == m.pos1) return n..
1 map 사용하기 map은 key, value로 이루어진 자료구조이다. 맵 기본 함수 기본형태 map : key와 value를 pair 형태로 선언합니다. iterator(반복자) begin() : beginning iterator를 반환 end() : end iterator를 반환 추가 및 삭제 insert( make_pair(key,value) ) : 맵에 원소를 pair 형태로 추가 erase(key) : 맵에서 key(키값)에 해당하는 원소 삭제 clear() : 맵의 원소들 모두 삭제 조회 find(key) : key(키값)에 해당하는 iterator를 반환 count(key) : key(키값)에 해당하는 원소들(value들)의 개수를 반환 기타 empty() : 맵이 비어있으면 true 아니면 false를 반환..
vector & dequeue & list 1. vector 저장 원리 : 백터는 일반적인 배열처럼 연속된 메모리 공간을 찾아서 잡고 배열처럼 차근차근 인덱스로 저장한다. 이 말은 즉 배열처럼 operator[]로 접근이 가능하다는 소리이다. 즉 백터는 동적으로 확장/가능이 가능한 dynamic array로 구현되어 있다. 강점 : 1) 배열처럼 constant time 안에 인덱스 접근이 가능하다. 2)끝 부분에 삽입하는 연산은 reallocating이 발생하지 않는 한 constat time이다. reallocating 발생한다 하더라도 amortised constant time안에 수행가능하다. 3)일반적으로 vector는 list와 dequeue보다 random access time과 끝에서의 삽입 삭제가 빠르다. (하지만 상황이 어떠느냐..