5 Stimmen

Einfügen von Enum-Werten in HashMap

Ich mache ein Programm, in dem ich Enum-Werte in eine HashMap einfügen muss. Können wir das wirklich machen? Ich habe es auf viele Arten versucht, aber es hat nicht geklappt.

Kann mir bitte jemand helfen? Durch das Programm muss ich eine HashMap implementieren, die 4 Threadpools enthält (deren Namen als Schlüssel dienen), zu denen ich ein ThreapoolExcecutor-Objekt habe.

Im Folgenden ist mein Code:

public class MyThreadpoolExcecutorPgm {
    enum ThreadpoolName
    {
        DR,
        PQ,
        EVENT,
        MISCELLENEOUS;
    }
    private static String threadName;
    private static HashMap threadpoolExecutorHash;

    public MyThreadpoolExcecutorPgm(String p_threadName) {
        threadName = p_threadName;

    }

    public static void fillthreadpoolExecutorHash() {
        int poolsize = 3;
        int maxpoolsize = 3;
        long keepAliveTime = 10;
        ThreadPoolExecutor tp = null;
        threadpoolExecutorHash = new HashMap();

        ThreadpoolName poolName ;
        tp = new ThreadPoolExecutor(poolsize, maxpoolsize, keepAliveTime,
                TimeUnit.SECONDS, new ArrayBlockingQueue(5));

        threadpoolExecutorHash.put(poolName,tp);    //Hier scheitere ich an der korrekten Implementierung von put()
    }

8voto

templatetypedef Punkte 343693

Sie sollten in Betracht ziehen, hier anstelle einer HashMap ein EnumMap zu verwenden. EnumMap ist bei der Verwendung von aufgezählten Werten viel schneller und platzsparender als eine HashMap, was genau das zu sein scheint, was Sie hier tun.

3voto

aioobe Punkte 397211

Natürlich ist es möglich, Enums als Schlüssel in einer Map zu haben.

Sie erhalten einen Fehler, weil `threadpoolExecutorHash` von `String` auf `ThreadPoolExecutor` abbildet, und es schlägt fehl, weil Sie versuchen, ein `String` (`poolName`) als Schlüssel einzufügen.

Ändern Sie einfach von

threadpoolExecutorHash = new HashMap();

zu

threadpoolExecutorHash = new HashMap();

Wie von @templatetypedef erwähnt, gibt es sogar eine spezielle Map-Implementierung, EnumMap, die darauf abzielt, Enums als Schlüssel zu verwenden.

0voto

Kellindil Punkte 4453

Sie verwenden ein String als Schlüssel für Ihre HashMap, Sie sollten stattdessen die Enum-Klasse verwenden. Ihr Code sollte so aussehen :

public class MyThreadpoolExcecutorPgm {
enum ThreadpoolName
{
    DR,
    PQ,
    EVENT,
    MISCELLENEOUS;
}
private static String threadName;
private static HashMap threadpoolExecutorHash;

public MyThreadpoolExcecutorPgm(String p_threadName) {
    threadName = p_threadName;

}

public static void fillthreadpoolExecutorHash() {
    int poolsize = 3;
    int maxpoolsize = 3;
    long keepAliveTime = 10;
    ThreadPoolExecutor tp = null;
    threadpoolExecutorHash = new HashMap();

    ThreadpoolName poolName ;
    tp = new ThreadPoolExecutor(poolsize, maxpoolsize, keepAliveTime,
            TimeUnit.SECONDS, new ArrayBlockingQueue(5));

    threadpoolExecutorHash.put(poolName,tp);    //Hier scheitere ich daran, die korrekte put()-Methode zu implementieren
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X