2013-06-05 2 views
0

HashMap을 사용하면 작동하는 코드가 있지만 대신 TreeMap을 사용하는 경우에는 사용하지 않습니다. 아무도 말할 수 있습니까? HashMap 대 Treemap

내 코드입니다 :

package ka.fil; 

import java.util.HashMap; 
import java.util.Map; 

public class ModelInMemory implements Model { 
    private Map<String,BeanRecord> map = new HashMap<>(); 

    @Override 
    public void putRecord(BeanRecord beanRecord) { 
     map.put(beanRecord.getEmail(), beanRecord); 

    } 

    @Override 
    public BeanRecord getRecord(String email) { 
     BeanRecord r = map.get(email); 
     return r; 
    } 

    @Override 
    public Iterable<BeanRecord> allRecord() { 
     return map.values(); 
    } 

    public ModelInMemory() { 

    } 



} 

내가 작동하지 의미하는 것은 내가 main 메소드에서 사용할 때이를 얻을 :

Exception in thread "main" java.lang.NullPointerException at 
java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) 
at ka.fil.ModelInMemory.putRecord(ModelInMemory.java:11) 
at ka.fil.AppBatch.main(AppBatch.java:10) 
+8

작동하지 않는다고 정의 할 수 있습니까? –

+1

오류 메시지를 게시 할 수 있습니까? –

+0

은 사전 식으로 분류됩니다. – Fildor

답변

10

하나의 차이점은 TreeMaps가 null 키를 지원하지 않지만 HashMaps는 지원한다는 것입니다.

TreeMap을 사용하면 beanRecord.getEmail()이 null을 반환하면 런타임에 예외가 발생합니다.

+0

이것이 진짜 이유라고 생각합니다 – NumberTen

+0

@ Kafil10 그래서 (r == null) system.out.println ("this is the answer")를 입력하십시오. ; getEmail() 직후. 그게 시작되면, 알게 될 것입니다. –

+0

네가 맞아, TreeMap이 null 키를 지원하지 않는다는 것을 몰랐다. 감사합니다. – NumberTen

3

그냥 라인을 교체하는 경우 -

private Map<String,BeanRecord> map = new HashMap<>(); 

와 -

당신이 트리 맵이 포함되어 있지 않습니다

import java.util.HashMap; 

을 가지고 있기 때문에 0

private Map<String,BeanRecord> map = new TreeMap<>(); 

는 그 다음 실 거예요 작동합니다. 이 문제를 쉽게 해결할 수 있습니다.

import java.util.*; 
+1

+1, 독수리 눈! 하지만 와일드 카드 가져 오기는 조금 "너무 많이"입니다. imoch – fge

+0

java.util의 경우 일반적으로 와일드 카드를 사용하므로 일반적으로 와일드 카드를 많이 사용합니다. 그렇지 않으면 패키지에서 3 개 이상을 가져 오는 경우에만 와일드 카드를 넣습니다. –

+0

+1하지만 오류 메시지가 나타나지 않으므로 그의 문제가 본인인지 확실하지 않습니다. – eternay