목록Programming/Data Structure (13)
MyCloud
Map - HashTable, HashMap 자바 컬렉션에서 제공하는 Map 인터페이스는 키(key)와 값(value)을 묶어서 하나의 데이터로 저장하는 구조입니다.Set 구조와 달리 중복을 허용하는 특징이 있습니다.키(key)의 경우에는 유일해야 하지만 값(value)은 데이터의 중복을 허용합니다.HashMap은 내부적으로 해싱(Hashing)을 이용해서 구현한 컬렉션이기 때문에많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보입니다. HashTable 또한 Map 인터페이스를 구현한 구조입니다.하지만 1.2 버전 이후부터 HashMap이 나오면서 HashTable에 비해 다양한 함수를 제공하는 HashMap으로 대체되었습니다.HashTable과 HashMap의 차이는 null 값을 허용하는데에 있습..
Set - HashSet 자바 컬렉션에서 제공하는 Set 인터페이스는 순서를 유지하지 않는 데이터의 집합입니다. Map 구조와 달리 중복을 허용하지 않는다는 특징이 있습니다. HashSet은 내부적으로 해싱(Hashing)을 이용해서 구현한 컬렉션입니다. HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하려면 LinkedHashSet을 사용해야 합니다. JAVA의 HashSet 구현 HashSet 을 활용한 아래 코드를 통해 주요 메서드와 사용법을 알아보겠습니다. 12345678910111213141516171819public class HashSetTest { public static void main(String[] args) { String[] strArr = {"a", "a", "b",..
자료구조 - 이진탐색트리 앞서 포스팅했던 이진트리를 활용한 이진탐색트리입니다. 이진탐색트리는 탐색작업을 효율적으로 하기 위한 자료구조입니다! 탐색이란 사전에서 검색하고자 하는 단어를 찾거나, 서점에서 책을 찾는 것과 같이 자료를 속에서 필요한 자료를 찾아내는 것을 말합니다. 탐색구조에서 탐색을 하기 위해서 찾을 자료를 식별할 수 있는 유일한 값을 키(Key) 라고 합니다. 이진탐색트리에서는 저장할 데이터의 크기, 즉 키에 따라 노드의 위치를 정의합니다. 그리고 이진탐색트리를 중위 순회 방법(LVR)으로 순회하면 숫자 크기 순으로 정렬된다는 성질이 있습니다. 이진탐색트리의 정의는 다음과 같습니다. 1. 모든 노드의 키는 유일하다. 2. 왼쪽 서브 트리의 원소의 키는 그 루트의 키보다 작다. 3. 오른쪽 서..
자료구조 - 이진트리 이진트리는 각 노드가 최대 2개의 서브트리를 가지는 트리를 말합니다! 자바로 이진트리를 구현해보겠습니다. JAVA로 이진트리 구현 12345678910111213141516public class Node { private int data; private Node left; private Node right; public Node(int data) { this.setData(data); } public int getData() {return data;} public void setData(int data) {this.data = data;} public Node getLeft() {return left;} public void setLeft(Node left) {this.left = ..
자료구조 - 트리, 이진트리 트리는 부모-자식 관계의 노드들로 이루어지며 계층적인 구조를 나타내는 자료구조입니다. 운영체제의 파일시스템, HTML, XML 등을 다룰 때 사용하는 DOM, 데이터베이스 등 다양하게 활용되고 있습니다. 트리구조에서 중요한 것은 부모는 여러 자식을 가질 수 있지만 자식은 하나의 부모를 갖는다는 것입니다. 이진트리는 각 노드가 최대 2개의 자식을 가지는 트리를 말합니다. 위의 그림은 포화이진트리 구조입니다. 모든 노드가 2개의 자식을 갖기 때문입니다. 트리의 최상단 노드를 뿌리, 즉 루트(Root)라고 합니다. 루트로부터 어떤 노드까지의 거리를 그 노드의 깊이(Depth)라 하고 깊이가 같은 노드끼리의 집합을 레벨(Level)이라 합니다. 같은 부모를 가진 노드들을 형제(Sib..
자료구조 - 큐 큐는 먼저 들어온 데이터가 먼저 나가는 선입선출(LIFO) 구조입니다.큐에는 삽입(ENQUEUE) 연산과 삭제(DEQUEUE) 연산이 존재하는데삽입의 경우 가장 마지막 위치(Rear)에 쌓이게 되며삭제의 경우 가장 먼저 들어온 데이터, 즉 Front 에 위치한 데이터가 삭제 됩니다.예를 들면, 줄을 서서 물건을 받는 경우를 생각하시면 됩니다! JAVA로 Queue 구현 큐를 구현하는 방법은 2가지가 있습니다.배열을 이용한 큐와 연결리스트를 이용한 큐입니다.먼저 배열을 이용한 큐의 구현입니다. 12345678910111213public class CQueueArray { private int front; private int rear; private int maxSize; private O..
자료구조 - 스택 스택은 가장 최근에 들어온 데이터가 가장 먼저 나가는 후입선출(LIFO) 구조입니다.스택에는 삽입(PUSH) 연산과 삭제(POP) 연산이 존재하는데삽입의 경우 가장 높은 위치(TOP)에 쌓이게 되며삭제의 경우 가장 마지막에 들어온 데이터, 즉 TOP에 위치한 데이터가 삭제 됩니다. JAVA로 Stack 구현 스택을 구현하는 방법은 2가지가 있습니다.배열을 이용한 스택과 연결리스트를 이용한 스택입니다.먼저 배열을 이용한 스택 구현입니다. 123456789101112public class CStackArray { private int top; private int maxSize; private Object[] stackArray; // 최대 크기로 배열 생성 public CStackArra..
ArrayList에 이어서 LinkedList에 대해 알아보겠습니다. LinkedList에서 가장 중요한 것은 노드입니다.객체 Node는 data 필드와 next 포인터 변수를 가지고 있는 구조입니다.각 노드는 다음 노드를 가리키는 하나의 참조만을 갖기 때문에 접근이 한 방향으로만 가능합니다. 1234567public static void main(String[] args) { LinkedList numbers = new LinkedList(); numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40); System.out.println("add : " + numbers);cs LinkedList를 사용하기 위해서는 우선 LinkedList ..
변수에 담겨진 데이터는 하나의 데이터유형을 하나만 보관할 수 있습니다. 하지만 배열은 하나의 데이터유형을 여러개 보관할 수 있습니다. 각 요소들은 정수형 인덱스로 접근가능하며 다양하게 활용할 수 있습니다. 리스트는 순서를 가진 항목들의 모임입니다. 일반적으로 리스트는 배열리스트와 연결리스트로 표현되는데 배열리스트는 크기가 제한되므로 삽입, 삭제 시 범위를 넘어가는 문제가 생깁니다. 반면 연결리스트는 크기가 제한되지 않아 삽입, 삭제가 효율적입니다. + 추가 (ArrayList와 Vector의 차이)기능적 측면에서 보면 ArrayList와 Vector의 차이는 거의 없습니다.하지만 Java API 문서에 따르면, ArrayList에는 다음과 같이 정의되어 있습니다."This implementation is..
* 본 포스팅은 Java Standard Ed.8 version을 기준으로 작성되었습니다. JAVA Collectionjava.util.AbstractCollection JAVA의 Collection은 데이터의 모임을 의미하는 인터페이스입니다.java.util 패키지에 존재하며 Iterable 인터페이스를 상속받습니다. Collection 인터페이스는 List, Queue, Set 인터페이스를 자식으로 가집니다.List에는 ArrayList, LinkedList, VectorQueue에는 PriorityQueue, DequeSet에는 HashSet, LinkedHashSet, TreeSet이 있습니다. List는 중복을 허용하고 순서를 가지는 경우에,Queue는 선입선출(FIFO) 구조가 필요할 때,Se..