CodeGym/Java Blog/무작위의/Java에서 사전을 만드는 방법
John Squirrels
레벨 41
San Francisco

Java에서 사전을 만드는 방법

무작위의 그룹에 게시되었습니다
회원
Java 프로그램에서 사전을 만들어야 하는 경우 이 문제를 해결하는 가장 논리적인 방법은 사전 데이터 구조를 사용하는 것입니다. 이 데이터 구조를 사용하면 "키 - 값" 형식으로 정보를 저장할 수 있습니다. Java에는 특별한 Dictionary 클래스와 그 자손인 Hashtable 이 있습니다 . 또한 "키-값" 쌍을 저장하는 Map 인터페이스와 HashMap 클래스도 있습니다 . 따라서 Java 사전을 만드는 방법에는 여러 가지가 있습니다.

사전 데이터 구조

따라서 Dictionary 데이터 구조는 정보를 키-값 조합으로 저장합니다. 즉, 모든 값과 키를 연결하고(예: id일 수 있음) 이 쌍을 사전에 입력합니다. 사전의 요소 주소 지정, 삭제, 사전 검색은 키에 의해 수행됩니다. 예를 들어 이름(키)이 전화번호(값)에 해당하는 전화번호부와 같은 데이터 구조를 사용하여 구성하는 것이 편리해 보입니다.

사전 클래스 및 확장

우선 java.util.Dictionary <K, V> util.Dictionary는 추상 클래스입니다. 키-값 관계를 나타내며 맵과 유사하게 작동합니다. 키가 주어지면 값을 저장할 수 있고 필요할 때 키를 사용하여 값을 다시 검색할 수 있습니다. 따라서 키-값 쌍의 목록입니다.
public abstract class Dictionary<K,V> extends Object
이 클래스는 추상 클래스이므로 직접 작업하지 않습니다. 사전에는 Hashtable 의 직계 하위 클래스가 있습니다 . 따라서 Java로 사전을 만들려면 Hashtable 을 사용할 수 있습니다 . 이 클래스는 키를 값에 매핑하는 해시 테이블을 구현하며 null이 아닌 개체를 키 또는 값으로 사용할 수 있습니다. Java 계층 구조에서 Hashtable은 Dictionary를 확장 하고 Map을 구현합니다 . 예를 들어 보겠습니다. 우리는 Hashtable을 기반으로 고전적인 사전인 전화번호부를 만들 것입니다 .
Dictionary phoneBook = new Hashtable();
이런 식으로 작성하면 일부 작업에 유형 캐스팅을 적용해야 합니다. 예를 들어 키 추출의 경우입니다.
System.out.println(((Hashtable) phoneBook).keySet());
이를 방지하기 위해 변경할 수 있습니다.
Dictionary phoneBook = new Hashtable ();
Hashtable phoneBook = new Hashtable ();
이 예에서는 명확성을 위해 첫 번째 옵션을 그대로 둡니다.
import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
출력은 다음과 같습니다.
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, 리키 맥브라이트=2001, 아이비 브릭스=1877}

HashMap을 사전으로

HashMap은 Hashtable 과 달리 Dictionary 의 직계 후손이 아닙니다 . 그러나 많은 기능으로 인해 대부분의 경우 HashMap을 사용하여 사전을 만드는 것이 좋습니다 . HashMap 클래스는 기능 면 에서 Hashtable 과 매우 유사합니다 . 주요 차이점은 Hashtable의 메서드는 동기화 되지만 HashMap은 동기화되지 않는다는 것입니다. Hashtable 의 동기화는 코드의 성능을 저하시킵니다. 또한 HashMap 클래스는 Hashtable 과 달리, 키(1)로 null을 사용하고 값으로 null 집합을 사용할 수 있습니다. 우리의 경우 프로그램은 위의 예와 정확히 동일하게 보일 것입니다. 유일한 차이점은 컬렉션의 유형입니다. 그러나 이것은 대부분의 경우 Java에서 사전으로 작업하는 데 선호되는 방법입니다.
import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();

       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");

       System.out.println(phoneBook);

       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));

       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
결과는 다음과 같습니다.
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null true false [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { 아이비 브릭스=1877, 리키 맥브라이트=2001, 조니 워커=2178}
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다