2010-01-24 3 views
2

Java ME/J2ME 환경에서 작동하도록 다음 코드를 얻고 싶습니다. 도와주세요 : 그것은 작동하지 않습니다항목 값 (키가 아님)을 기반으로 해시 테이블 정렬

Hashtable <Activity, Float>scores = new Hashtable<Activity, Float>(); 
    scores.put(act1, 0.3); 
    scores.put(act2, 0.5); 
    scores.put(act3, 0.4); 
    scores.put(act5, 0.3); 


    Vector v = new Vector(scores.entrySet()); 
    Collections.sort(v); //error is related to this line 
    Iterator it = v.iterator(); 

    int cnt = 0; 
    Activity key; 
    Float value; 

    while(it.hasNext()){ 

     cnt++; 
     Map.Entry e=(Map.Entry)it.next(); 

     key = (Activity)e.getKey(); 
     value = (Float)e.getValue(); 

     System.out.println(key+", "+value); 
    } 

, 나는 오류가 발생합니다 :

Exception in thread "main" java.lang.ClassCastException: java.util.Hashtable$Entry cannot be cast to java.lang.Comparable This points to the line that I've indicated with a comment in the code.

도와주세요, 그리고 명심 내가 J2ME를 사용하고 있습니다!

답변

0

entrySet 메서드는 해시 테이블의 값을 반환하지 않으므로 키 - 값 쌍을 반환합니다. 값을 원하면 values 메서드를 사용해야합니다.

키 - 값 쌍을 원하지만 값만 정렬하려는 경우 두 쌍의 값을 비교하는 키 - 값 쌍에 Comparator을 구현하고메서드의 오버로드를 사용합니다 목록과 함께 Comparator.

4

유효한 코드는 유효한 J2ME 근처에 없으며, J2SE (Full Fat) Java입니다. J2ME에는 현재 generics 또는 Collections 클래스 나 Comparable 인터페이스가 없습니다. MIDP 2CLDC 1.1, J2ME의 구성 요소 인 JavaDoc을 확인하십시오. 당신의 오류는 J2ME에서 나온 것이 아니기 때문에 프로젝트 설정에서 근본적인 잘못을 저 지르지는 않았을 것입니다.

당신이 J2ME에서 이것을하고 싶다면 당신은 정렬 기능을 직접 작성해야합니다. 내가 말할 수있는 한 그러한 것은 존재하지 않기 때문입니다. Bubblesort는 쓰기가 쉽습니다. 해시 테이블의 순차적 멤버에 쉽게 액세스 할 수있는 유일한 방법은 열거 (scores.keys() 및 scores.values ​​())를 사용하는 것입니다.

또한
boolean fixedPoint = false; 
while (!fixedPoint) 
{ 
    fixedPoint = true; 

    Enumeration e = scores.keys();  
    if (!e.hasMoreElements()) return; 
    Object previousKey = e.nextElement(); 

    while (e.hasMoreElements()) { 
    Object currentKey = e.nextElement(); 
    if ((Float) scores.get(currentKey) > (Float) scores.get(previousKey)) { 
     swap(currentKey, previousKey); 
     fixedPoint = false; 
    } 
    previousKey = currentKey; 
    } 
} 

는, 어딘가에 두 스왑 스왑 함수를 작성해야합니다 : 당신이 그들과 관련있는 점수 (수레)를 기반으로 오름차순으로 당신의 활동을 정렬 할 가정하면, 당신이 뭔가처럼 원하는 해시 테이블의 요소에 키가 지정되었을 경우 주목할 가치가있는 가장 빠른 구현은 아닙니다. 거대한 빅리스트를 원한다면 버블 정렬은 좋지 않을 것입니다. 반면 J2ME이 제공하는 제한된 도구로는 매우 쉽습니다!