반응형

언어 자료구조 알고리즘/디딤돌 Java 언어 Part2 활용 23

[Java 언어 활용] 3.12 HashMap 클래스

[Java 언어 활용] 3.12 HashMap 클래스 Java의 HashMap 클래스는 Map 인터페이스 기반의 구현 클래스입니다. 그리고 해쉬 테이블 자료 구조를 표현한 클래스입니다. 앞에서 다루었던 HashSet 클래스도 해쉬 테이블 자료 구조를 표현한 클래스였습니다. HashSet 클래스는 Collecion 인터페이스 기반의 구현 클래스로 단일 개체를 보관하는 클래스이며 HashMap 클래스는 key와 value를 쌍으로 보관하는 클래스입니다. 보관할 때 key를 해쉬 테이블 내부의 해쉬 함수를 통해 보관하여 검색할 때 key로 검색하면 빠르게 value를 찾을 수 있는 장점을 갖고 있습니다. HashMap 형식 변수 선언 및 개체 생성할 때는 제네릭 형식 인자로 키와 값을 명시하여 표현합니다. H..

[Java 언어 활용] 3.11 Map 인터페이스

[Java 언어 활용] 3.11 Map 인터페이스 HashSet 클래스를 이용하여 자료를 보관할 때 원하는 자료를 판별하기 위해 반복자를 사용한다면 선형 자료구조와 큰 차이를 보이지 않습니다. 위 예처럼 단순 값을 보관하고 존재하는지 판별하기 위해 contains 메서드를 사용하면 빠릅니다. 하지만 특정 클래스 형식 개체를 보관하고 주요 멤버로 개체를 검색하려면 contains 메서드를 사용하여 해결할 수 없고 반복자를 사용해야 할 것입니다. 이를 위해 Java에서는 Map 인터페이스를 제공하고 있고 이를 기반으로 구현 클래스를 이용하면 좋은 성능을 갖는 응용을 개발할 수 있습니다. Collection 인터페이스는 특정 자료를 보관하는 컬렉션에서 제공해야 할 기능을 약속하였습니다. 대신 Map 인터페이스..

[Java 언어 활용] 3.10 HashSet 클래스

[Java 언어 활용] 3.10 HashSet 클래스 앞에서 Collection 인터페이스를 기반으로 구현 클래스에는 List와 Set이 있다고 했습니다. List 클래스는 선형 자료구조를 구현한 클래스이며 Set은 비선형 자료를 구현한 클래스입니다. 그리고 Set 클래스를 기반으로 파생한 StoredSet, HashSet 클래스가 있습니다. StoredSet은 이진 탐색 트리를 구현한 클래스이며 HashSet은 해쉬 테이블을 구현한 클래스입니다. 두 가지 모두 빠른 검색이 필요할 때 사용하는 클래스이며 같은 자료를 중복 보관할 수 없는 특징을 갖고 있습니다. 자료구조를 학습하면 선형 자료구조에서의 탐색 비용은 O(N)이고 이진 탐색 트리의 탐색 비용은 (logN), 해쉬 테이블의 탐색 비용은 O(1)이..

[Java 언어 활용] 3.9 Queue 인터페이스

[Java 언어 활용] 3.9 Queue 인터페이스 Java의 Queue 인터페이스는 자료구조 큐를 약속한 것입니다. 자료구조 큐는 FIFO(First In First Out, 선입선출) 형태로 자료를 보관하고 꺼내는 버퍼입니다. Java의 Queue 인터페이스에서는 보관할 때 offer 메서드를 사용하며 가장 먼저 보관한 자료를 꺼낼 때는 poll 메서드를 사용합니다. 이 외에 가장 먼저 보관한 자료를 단순 참조하는 peek 메서드와 비었는지 판별하는 empty 메서드를 제공하고 있습니다. public void offer(Element data);//순차보관 public Element poll();//가장 먼저 보관한 값 꺼내고 반환 public Element peek();//가장 먼저 보관한 값 단순..

[Java 언어 활용] 3.8 Stack 클래스

[Java 언어 활용] 3.8 Stack 클래스 Java의 Stack 클래스는 자료구조 스택을 구현한 것입니다. 자료구조 스택은 LIFO(List In First Out, 후입선출) 형태로 자료를 보관하는 임시 버퍼입니다. 버퍼는 임시로 자료를 보관해 두었다가 필요할 때 꺼내 쓰는 저장소며 스택은 꺼내달라고 요청하면 가장 최근에 보관한 자료를 꺼내줍니다. Java의 Stack 클래스에서는 일반적인 스택에 약속하고 있는 push 메서드와 pop 메서드를 제공하고 있으며 이 외에 peek, emptry 메서드 및 search 메서드를 제공합니다. public void push(Element data);//순차보관 public Element pop();//가장 최근에 보관한 값 꺼내고 반환 public Ele..

[Java 언어 활용] 3.7 LinkedList 클래스

[Java 언어 활용] 3.7 LinkedList 클래스 Java 언어에서 LinkedList는 연결리스트를 구현한 클래스입니다. Vector와 ArrayList 클래스처럼 List 클래스를 기반으로 파생한 클래스입니다. 그리고 연결리스트도 배열처럼 선형 자료구조입니다. 하지만 배열은 저장소가 연속적인 메모리에 하나의 덩어리로 할당받지만 연결리스트는 노드 하나에 하나의 데이터를 보관하고 노드 내의 링크에 의해 순서 정보(다음 노드의 위치 정보, 이전 노드의 위치 정보)를 기억하는 자료구조입니다.[그림 3.3] 배열과 연결리스트 LinkedList 클래스도 Vector와 ArrayList처럼 List 클래스를 기반으로 파생한 클래스이므로 당연힌 Collection 인터페이스에 약속한 기능을 구현하고 있습니..

[Java 언어 활용] 3.6 ArrayList 클래스

[Java 언어 활용] 3.6 ArrayList 클래스 Java 언어에서는 순차 리스트를 구현한 ArrayList 클래스를 제공하고 있습니다. ArrayList는 내부 저장소가 배열처럼 연속적인 메모리 형태입니다. 그리고 저장소의 크기를 변화할 수 있다는 특징이 있습니다. 이러한 점은 앞에서 다룬 Vector 클래스와 차이가 없습니다. 실제 Vector 클래스와 ArrayList 클래스는 거의 모든 부분에서 비슷합니다. 차이가 있는 부분은 동기화를 할 수 있는가 여부입니다. 여기서 얘기하는 동기화란 여러 개의 스레드에서 공유 자원을 경쟁하여 사용할 때 개발자가 임계 영역에 진입하고 나가는 것을 제어하여 자원 경쟁 문제에서의 교착 상태 발생등을 방지하는 것을 말합니다. 따라서 멀티 스레드를 이용하여 비동기..

[Java 언어 활용] 3.5 Iterator 클래스

[Java 언어 활용] 3.5 Iterator 클래스 Java에서 제공하는 컬렉션은 보관하고 있는 자료들을 순차적으로 접근하면서 처리할 때 사용하는 Iterator 형식을 제공하고 있습니다. Iterator는 반복자라고 부르며 컬렉션 종류에 관계없이 같은 방법으로 프로그래밍 할 수 있게 해 줍니다. Iterator 형식에는 다음 요소가 있는지 판별하는 hasNext 메서드와 다음으로 이동하는 next 메서드, 읽어 온 요소를 삭제하는 remove 메서드 등을 제공합니다. public boolean hasNext(); public Object next(); public void remove(); Iterator 개체는 컬렉션 개체의 iterator 메서드를 호출하여 얻어올 수 있습니다. 그리고 hasNex..

[Java 언어 활용] 3.4.2 Vector를 이용하여 인덱스로 관리하기

[Java 언어 활용] 3.4.2 Vector를 이용하여 인덱스로 관리하기 Vector 클래스를 사용할 때 확장 가능한 특징을 반드시 사용할 필요는 없습니다. Vector 클래스는 내부적인 저장소는 선형적인 형태이므로 특정 인덱스에 보관할 개체가 정해져 있다면 빠르게 추가, 변경, 삭제 등을 할 수 있습니다. 만약 보관할 자료에 일련 번호가 있고 최대 일련 번호가 정해져 있다면 인덱스로 관리하는 것이 처리 속도를 높이는 데 기여합니다. 먼저 Vector 컬렉션을 생성할 때 최대 일련 번호를 입력 인자를 전달하여 생성합니다. 그리고 반복문으로 최대 일련 번호 개수 만큼의 null을 추가합니다. 이는 이 후 해당 인덱스에 유효한 개체를 보관한 것인지 판별하는 주요한 기준으로 사용합니다. public Memb..

[Java 언어 활용] 3.4.1 Vector를 이용하여 특정 키 순으로 보관하기

[Java 언어 활용] 3.4.1 Vector를 이용하여 특정 키 순으로 보관하기 Vector 클래스는 Collecion 인터페이스에 약속한 기능 외에도 추가적으로 제공하는 기능들이 있습니다. 내부적으로 Vector 클래스는 선형적인 저장소를 갖고 있으며 저장소의 크기를 확장할 수 있어 확장 배열이라고 볼 수 있습니다. Vector 컬렉션에 자료를 보관할 때 add(Object ojb) 메서드를 이용하면 순차적으로 보관합니다. 그런데 Vector 클래스에서는 add(int index, Object obj) 메서드를 이용하면 원하는 위치에 자료를 보관할 수 있습니다. 만약 현재 A, B, C, D를 보관한 상태에서 add(2,F)를 호출하면 A, B, F, C, D 순으로 보관합니다. 즉 첫 번째 전달하는..

반응형