HashMap mit first in first out

jeipack

Erfahrenes Mitglied
Hi
Ich bin auf der Suche nach einer Klasse die genau das kann was eine HashMap kann aber sich die Reihenfolge merkt. Dabei bin ich auf Hashtable gestossen, die die Reihenfolge laut [1] beibehalten soll. Allerdings stimmt da was nicht..
Java:
  void testHashTable() {
    Map<Integer, String> blah = new Hashtable<Integer, String>();
    blah.put(1, "eins");
    blah.put(2, "zwei");
    blah.put(3, "");
    blah.put(4, "vier");
    
    //hier wird ein Entry hinzugefüht:
    blah.put(5, "fünf");
    //und hier einer bearbeitet
    blah.put(3, blah.get(3)+"drei");
    for( Entry<Integer, String> entry : blah.entrySet()) {
      System.out.println(entry.getKey()+": "+entry.getValue());
    }
  }
Resultat:
Code:
5: fünf
4: vier
3: drei
2: zwei
1: eins
also.. first in _last_ out?

Mit Strings als Key funktionierts gar nicht mehr:
Java:
  void testHashTable2() {
    Map<String, Integer> blah = new Hashtable<String, Integer>();
    blah.put("eins", 1);
    blah.put("zwei", 2);
    blah.put("drei", 3);
    blah.put("vier", 4);
    for( Entry<String, Integer> entry : blah.entrySet()) {
      System.out.println(entry.getKey()+": "+entry.getValue());
    }
  }
Resultat:
Code:
drei: 3
zwei: 2
vier: 4
eins: 1

Also...
1. Garantiert eine Hashtable nun die Reihenfolge oder nicht?

2. Welche Klasse könnt ihr mir empfehlen, die die Reihenfolge merkt und in der man später auch einen Value bearbeiten kann?

Vielen Dank schonmal für die Empfehlungen und Erklährungen.

In der Zwischenzeit bastle ich mir mal wieder ein eigenes Konstrukt damit ich weiter machen kann :)

Gruss

1: http://www.interview-questions-java.com/java-collections.htm
 
Hi,

wo genau in dem Artikel hast du gelesen, dass in einer Hashtable die Sortierung beibehalten würde? Das macht die nämlich, wegen des Hashings, gerade nicht.
Wenn die Sortierung wichtig ist, dann solltest du ein SortedSet oder eine SortedMap verwenden. Allerdings werden dann gezielte Lookups nach Keys teurer als beim Hashing.

hth
 
Hallo,

was du suchst ist LinkedHashMap:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author Thomas.Darimont
 * 
 */
public class LinkedHashMapExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Map<Integer, String> map = new LinkedHashMap<Integer, String>();
		map.put(1, "eins");
		map.put(2, "zwei");
		map.put(3, "");
		map.put(4, "vier");
		
		for(Integer key : map.keySet()){
			System.out.println(key + " " + map.get(key));
		}
	}

}

Gruß Tom
 
Guten Morgen

@benjava: Ich muss gestehen die Info steht da nur implizip:
Difference between HashMap and HashTable? Can we make hashmap synchronized?
2. HashMap does not guarantee that the order of the map will remain constant over time.

@Thomas Darimont: klingt genau nach dem was ich suchte. Danke!

Gruss
 
Zurück