문제

Java에서 해시 테이블(또는 연관 배열...)을 생성하는 가장 간단한 방법은 무엇입니까?내 google-fu에서 몇 가지 예를 찾았지만 이를 수행하는 표준 방법이 있습니까?

그리고 각 쌍의 개체에 대해 add 메서드를 개별적으로 호출하지 않고 키->값 쌍 목록으로 테이블을 채울 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

Map map = new HashMap();
Hashtable ht = new Hashtable();

두 수업 모두 java.util 패키지에서 찾을 수 있습니다. 두 가지의 차이는 다음에 설명되어 있습니다. JGURU FAQ 항목.

다른 팁

이중 중괄호를 사용하여 데이터를 설정할 수 있습니다.여전히 add 또는 put을 호출하지만 덜 보기 흉합니다.

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};

또한 맵과 해시 테이블은 모두 Java 5 이상에서 일반적이라는 것을 잊지 마십시오 (다른 클래스와 마찬가지로 수집 프레임 워크).

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;

Map map = new HashMap();

에드먼드 말했다.

항상 .add를 부르지 않는 것은 관용적으로 아닙니다. 당신이 정말로 원한다면 할 수있는 다양한 해킹 (배열에 저장 한 다음 루핑)이 있지만 권장하지는 않습니다.

그리고 각 쌍의 개체에 대한 추가 메소드를 개별적으로 호출하지 않고 키-> 값 쌍의 목록으로 테이블을 채우는 방법이 있습니까?

질문의 한 가지 문제는 데이터가 어떤 형태로 시작되는지 언급하지 않는다는 것입니다. 쌍 목록이 맵 목록이 된 경우, 객체 객체는 매우 쉽습니다.

이것을 버리기 위해 hashtable의 확장 인 java.util.properties라는 (많은 악성) 클래스가 있습니다. 문자열 키와 값 만 기대하며 파일 또는 스트림을 사용하여 데이터를로드하고 저장할 수 있습니다. 읽는 파일의 형식은 다음과 같습니다.

key1=value1
key2=value2

이것이 당신이 찾고있는 것인지 모르겠지만 이것이 유용 할 수있는 상황이 있습니다.

Java의 해시 함수는 최적보다 적습니다. 충돌을 줄이고 ~ 50% 용량으로 다시 호출을 거의 완전히 제거하려면 Buz Hash 알고리즘을 사용하겠습니다. Buz Hash

Java의 해싱 알고리즘이 약한 이유는 해시를 어떻게 해시하는지에서 가장 분명합니다.

"a".hash() ASCII 표현을 제공하십시오 "a" - 97, 그래서 "b" 할 것입니다 98. 해싱의 요점은 임의의 "가능한 한 무작위"숫자를 할당하는 것입니다.

빠르고 더러운 해시 테이블이 필요한 경우 꼭 사용하십시오. java.util. 더 확장 가능한 강력한 것을 찾고 있다면, 나는 당신 자신의 구현을 살펴볼 것입니다.

Hashtable<Object, Double> hashTable = new Hashtable<>();

값을 넣으십시오 ...

최대를 얻으십시오

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top