[java] 자바에서 HashMap 인쇄

나는 HashMap:

private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();

이제 모든 값을 살펴보고 인쇄하고 싶습니다.

나는 이것을 썼다 :

for (TypeValue name : this.example.keySet()) {
    System.out.println(name);
}

작동하지 않는 것 같습니다.

무엇이 문제입니까?

편집 : 또 다른 질문 :이 컬렉션은 제로 기반입니까? 키가 1 개 있고 값이 0 또는 1이면 크기가 무엇입니까?



답변

keySet () 은 해시 맵에서 키 세트 만 반환합니다.이 키 세트를 반복하고이 키를 사용하여 해시 맵에서 값을 가져와야합니다.

귀하의 예에서 해시 맵의 키 유형은 TypeKey이지만 TypeValue일반 for 루프에서 지정했기 때문에 컴파일 할 수 없습니다. 다음으로 변경해야합니다.

for (TypeKey name: example.keySet()){
            String key = name.toString();
            String value = example.get(name).toString();
            System.out.println(key + " " + value);
} 

Java8 업데이트 :

 example.entrySet().forEach(entry->{
    System.out.println(entry.getKey() + " " + entry.getValue());
 });

키 값을 인쇄 할 필요가없고 해시 맵 값만 필요한 경우 다른 사람의 제안을 사용할 수 있습니다.

또 다른 질문 :이 컬렉션이 제로베이스입니까? 키가 1 개이고 값이 0 또는 1이 될까요?

에서 반환 된 컬렉션 keySet()Set입니다 . 인덱스를 사용하여 Set에서 값을 가져올 수 없으므로 0 기반인지 1 기반인지에 대한 질문이 아닙니다. 해시 맵에 하나의 키가있는 경우 반환 된 keySet ()에는 하나의 항목이 포함되고 크기는 1이됩니다.


답변

키 값 쌍을 보는 간단한 방법 :

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2

방법 1과 방법 2 모두 다음을 출력합니다.

[{b=2, a=1}]


답변

을 가지고 있다고 가정하면 다음 Map<KeyType, ValueType>과 같이 인쇄 할 수 있습니다.

for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    System.out.println(entry.getKey()+" : "+entry.getValue());
}


답변

키와 값을 모두 인쇄하려면 다음을 사용하십시오.

for (Object objectName : example.keySet()) {
   System.out.println(objectName);
   System.out.println(example.get(objectName));
 }


답변

몇 가지 옵션이 있습니다


답변

키 세트가 아닌 값 세트를 원합니다.

for (TypeValue name: this.example.values()) {
        System.out.println(name);
}

당신이 제공하는 코드는 컴파일조차하지 않을 것입니다. 이것은 미래의 질문에서 언급 할 가치가있을 것입니다 – “작동하지 않는 것 같습니다”는 약간 모호합니다!


답변

Java 8 접근 방식, 사용 BiConsumer및 람다 함수 를 언급 할 가치가 있습니다.

BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) ->
           System.out.println(o1 + ", " + o2);

example.forEach(consumer);

toString필요한 경우 두 유형의 메서드를 재정의했다고 가정 합니다.