Java

자료구조 스터디

Bryan2019.01.02 15:23조회 수 5댓글 0

    • 글자 크기
URL 1 http://blog.naver.com/PostView.nhn?blogI...rom=search

1. ArrayList _vs. Linked List _vs. Double Linked List

 

(1) ArrayList

 

- ArrayList : https://opentutorials.org/module/1335/8709

 

Array List는 배열을 이용해서 리스트를 구현한 것을 의미합니다.

장점은 내부적으로 배열을 이용하기 때문에 인덱스를 이용해서 접근하는 것이 빠릅니다.

하지만 데이터의 추가와 삭제가 느립니다.

 

- ArrayList - Java 구현 : https://opentutorials.org/module/1335/8715

- [Java] 자바의 자료구조 - ArrayList, Stack : https://onsil-thegreenhouse.github.io/programming/java/2018/02/18/java_tutorial_1-22/

 

 

(2) Linked List

 

자료구조: Linked List 대 ArrayList : http://www.nextree.co.kr/p6506/

 

LinkedList 는 무한 개수의 자료를 삽입할 수 있다.

ArrayList 는 사이즈가 고정되어 있기 때문에 삽입 시 사이즈를 늘려주는 연산이 추가되어야 한다.

ArrayList 는 삭제 시 순차적인 인덱스 구조로 인해서 삭제된 빈 인덱스를 채워야 하기 때문에 채워주는 연산이 추가 되어야 한다.

LinkedList 는 채우는 작업 없이 주소만 서로 연결시켜 주면 되기 때문에 추가/삭제가 ArrayList 보다 빠르고 용이하다.

삽입 / 삭제가 빈번하게 발생하는 프로세스의 경우 LinkedList 를 사용하여 시스템을 구현하는 것이 바람직하다.

 

 

ArrayList 에서는 무작위 접근 ( Random Access ) 이 가능 / LinkedList 에서는 순차접근 ( Sequential Access ) 만 가능하다.

 

 

(3) Doubly Linked List

Doubly linked list - Java 구현 - https://opentutorials.org/module/1335/8941

 

 

(4) Singly Linked List vs Doubly Linked List

 

[자료구조] Java 단순 연결 리스트(simple linked list) 정리 - http://hyeonstorage.tistory.com/259

[자료구조] Java 이중 연결 리스트 (doubly linked list) 정리 - http://hyeonstorage.tistory.com/261

 

 

2. Stack _vs. Queue

 

Difference Between Stack and Queue - https://techdifferences.com/difference-between-stack-and-queue.html

 

Stack - https://terms.naver.com/entry.nhn?docId=2837556&cid=40942&categoryId=32841

 

Queue - https://terms.naver.com/entry.nhn?docId=834442&cid=42344&categoryId=42344

 

Stack과 Queue - http://tcpschool.com/java/java_collectionFramework_stackQueue

 

Stack - Class , Queue - Interface

 

 

3. HashMap _vs. HashTable

 

Map 컬렉션 클래스 - http://tcpschool.com/java/java_collectionFramework_map

6 Difference Between HashMap And HashTable : Popular Interview Question In Java With Example

- https://javahungry.blogspot.com/2014/03/hashmap-vs-hashtable-difference-with-example-java-interview-questions.html

 

(1) HashMap 은 비동기, Not Thread Safe.

 

(2) HashMap 은 key 에 하나의 null 만 허용, value 는 여러개의 null 허용

    HashTable 은 key 와 value 에 null 을 허용하지 않음

 

(3) HashMap object values are iterated by using iterator .Hashtable is the only class other than vector which uses enumerator to iterate the values of Hashtable object.

 

(4) Fail-fast iterator  : 

The iterator in HashMap is fail-fast iterator while the enumerator for Hashtable is not.

Hashmap 의 iterator 는 fail-fast iterator 라면 Hashtable 의 enumerator 는 fail-fast iterator 가 아니다.

 

오라클 문서에 따르면, 

iterator 가 생성된 후 iterator 자신의 제거 메소드를 제외하고는 Hashtable 이 구조적으로 수정되면 iterator 는 ConcurrentModification Exception 을 throw 한다.

 

Structural modification means adding or removing elements from the Collection object (here HashMap or Hashtable) .

구조적인 수정이란 Collection (hashtable, hashmap) 객체에서 요소들을 추가하거나 제거한다는 것을 의미한다.

 

Thus the enumerations returned by the Hashtable keys and elements methods are not fail fast.We have already explained the difference between iterator and enumeration.

 

(5) 성능 : HashMap 은 unsynchronized 이기 때문에 훨씬 빠르고 적은 메모리를 사용한다. Unsynchronized 객체들이 보통 단일 스레드 환경에서의 Hashtable 같은 synchronized개체에 비해 성능상 더 낫다. 

 

(6) Superclass and Legacy :  Hashtable 은 현재 JDK 1.7 에서 잘 사용되지 않는 Dictionary 서브 클래스이다. 더이상 사용되지 않는다.

It is better off externally synchronizing a HashMap or using a ConcurrentMap implementation (e.g ConcurrentHashMap).HashMap is the subclass of the AbstractMap class. Although Hashtable and HashMap has different superclasses but they both are implementations of the "Map"  abstract data type.

 

When to use HashMap and Hashtable?

https://javahungry.blogspot.com/2014/03/hashmap-vs-hashtable-difference-with-example-java-interview-questions.html

 

1. Single Threaded Application

 

HashMap should be preferred over Hashtable for the non-threaded applications. In simple words , use HashMap in unsynchronized or single threaded applications .

 

2. Multi Threaded Application

 

We should avoid using Hashtable, as the class is now obsolete in latest Jdk 1.8 . Oracle has provided a better replacement of Hashtable named ConcurrentHashMap. For multithreaded  application prefer ConcurrentHashMap instead of Hashtable. 

 

  HashMap Hashtable
Synchronized No Yes
Thread-Safe No Yes
Null Keys and Null values One null key ,Any null values Not permit null keys and values
Iterator type Fail fast iterator Fail safe iterator
Performance Fast Slow in comparison
Superclass and Legacy AbstractMap , No Dictionary , Yes

 

 

4. TreeMap _vs. TreeTable

http://rangken.github.io/blog/2015/java.map/

https://onsil-thegreenhouse.github.io/programming/java/2018/02/22/java_tutorial_1-24/

TreeMap 은 key 를 기준으로 정렬할때 유용

 

(1) 성능면에서는 HashMap

(2) 정렬은 TreeMap

(3) 입력순서는 LinkedHashMap

 

5. Sort - 이론 (많은 Sort Logic 들 중 어떤것을 적용할지 판단할 수 있도록)

https://jaybdev.net/2017/06/13/Algorithm-9/

http://cwondev.tistory.com/15

 

 

 

 

 

    • 글자 크기
지뢰찾기 게임 ACL

댓글 달기

번호 카테고리 제목 최근 수정일
73 하버드 구조 2019.01.14
72 폰 노이만 구조 2019.01.14
71 MySQL Exporting MySQL database to a dump file 2019.01.08
70 Git 특정 브랜치 clone하는 방법 2019.01.08
69 Etc 지뢰찾기 게임 2019.01.08
Java 자료구조 스터디 2019.01.07
67 Oracle ACL 2019.01.07
66 Oracle 18c EM 포트 변경 쿼리 2019.01.07
65 Oracle STATS 2019.01.07
64 Oracle ORA-01139: RESETLOGS option only valid after an incomplete database recovery 2019.01.07
63 Oracle Shell Commands From PL/SQL 2019.01.05
62 DBMS_JAVA.grant_permission 2019.01.05
61 change local_listener 2019.01.05
60 Etc 세계지도 및 대한민국 주변도 서비스 2019.01.04
59 Java Java Study 2019.01.04
58 Java Java - Code Playground 2019.01.04
57 Java Generic Method 2019.01.03
56 Gradle gradle - task 실행시 에러발생 e: java.lang.OutOfMemoryError: GC overhead limit exceeded 2019.01.03
55 Java Java Design Pattern 2019.01.02
54 Git Git - global user check 2019.01.02
53 Elm Elm 2019.01.02
52 Elm elm fmt 2019.01.02
51 UltraVNC VNC 2018.12.30
50 ORA-03113: end-of-file on communication channel 2018.12.30
49 2019년 경제전망 2018.12.30
48 The 2018 Web Developer Roadmap 2018.12.27
47 Kotlin Generics 정의 2018.12.13
46 Cmder | Console Emulator 2018.12.13
45 ktlint 2018.12.12
44 VMware Workstation Pro download 2018.12.11
43 Power Supply Calculator 2018.12.09
42 spring security - ip based url pattern access 2018.12.06
41 UltraEdit - Download 2018.12.05
40 Gradle Gradle Upgrade 2018.12.05
39 VisualVM 2018.12.05
38 WebJars - Web Libraries in Jars 2018.12.04
37 YARN 무엇에 쓰는 물건인고? 2018.12.04
36 kotlin - github 2018.12.04
35 kotlin-playground - github 2018.12.04
34 뮤텍스 2018.12.04
33 HTTP 란 2018.12.04
32 Why MySQL could be slow with large tables ? 2018.12.04
31 Yarn - default command 2018.12.04
30 Exposed JetBrains - Exposed - DataBase and DataSource - PostgreSQL 2018.12.03
29 UTF-8 string length & byte counter 2018.12.03
28 Linux Linux / Unix Find All The Files Owned By a Particular User / Group 2018.12.03
27 Driver PIXMA G4900 Driver 2018.12.03
26 포트 목록 2018.12.03
25 TechSmith Codecs 2018.12.03
24 [MySQL] 무한정 늘어나는 log-bin 파일 줄이기 2018.12.02
23 Suwoni-Codelab 2018.12.02
22 Java JDK 12 베타, 자바 12에 적용되는 새로운 기능 2018.12.01
21 Git Git 사용자 정보 수정 2018.12.01
20 Windows disk bad sector check & repair 2018.12.01
19 Windows Remove Empty Directories 2018.12.01
18 Java JDK Download 2018.11.30
17 나눔글꼴 - 네이버 한글한글아름답게 2018.11.30
16 JIET 2018.11.30
15 Git Git Download 2018.11.28
14 Git git 에서 https repository 연결시 SSL 인증서 오류 해결법 2018.11.28
13 IntelliJ IDEA What’s New in IntelliJ IDEA 2018.11.28
12 Notepad++ Download 2018.11.27
11 IntelliJ IDEA JetBrains License Server 2018.11.25
10 Ktor Ktor 2018.11.25
9 chocolatey install 2018.11.23
8 Spring SEO 최적화 : URL 주소 만들기 규칙 2018.11.23
7 IntelliJ IDEA Toolbox App 2018.11.23
6 Etc icon - star 2018.11.23
5 Free scripts and components for websites 2018.11.23
4 Gradle Gradle 파일 구성하기 2018.11.22
3 Kotlin Kotlin Gradle Plugin 2018.11.22
2 Best Error Page Templates 2018 2018.11.22
1 Etc Slack Workspaces 2018.11.22
첨부 (0)