Eigener Assoziativ-Speicher

Status
Nicht offen für weitere Antworten.

redbomber

Bekanntes Mitglied
Ich brauche eure Hilfe:

Ich muss gerade den folgenden Assoziativspeicher verwenden, blicke da aber nicht durch.

Code:
public class SuperHashMap<K, V> extends TreeMap<K, Object> {

	protected LinkedList<V> cast(Object o) {
		return (LinkedList<V>)o;
	}

	public List<V> get(K key) {
		Object o = super.get(key);
		List<V> list=Collections.EMPTY_LIST;
		if (o!=null) {
			if (o instanceof LinkedList) {
				list=Collections.unmodifiableList(cast(o));
			} else {
				ArrayList arrayList = new ArrayList<V>(1); // less overhead than linkedlist
				arrayList.add((V)o);
				list= Collections.unmodifiableList(arrayList);
			}
		}			
		return list;
	}
	
	public void put(K key, V value) {
		Object o = super.get(key);
		if (o==null) {
			super.put(key, value);
		} else {
			if (o instanceof LinkedList) {
				if (!cast(o).contains(value)) {
					cast(o).add(value);
				}
			} else {
				LinkedList<V> linkedList = new LinkedList<V>();
				linkedList.add((V)o);
				linkedList.add(value);					
				super.put(key, linkedList );
			}
		}			
	}	
}

Ich benötige diese super hashmap, diese soll mir für einen key (Long) eine LinkedList<MeinObjekt> liefern

-------------------------------------------------------------------------------------------------------
1. Frage:
Wie initialisiere ich diese HashMap?

ich dachte zuerst:
code]
SuperHashMap<Long, LinkedList<MeinObjekt> >
[/code]
ABer das muss glaub wie folgt sein:
SuperHashMap<Long, MeinObjekt>

--------------------------------------------------------------------------------------------------------
2. Frage:
Wenn ich mir dann für einen Key die LinkedList<MeinObjekt> erhalten möchte habe ich das problem, dass diese immer vom Typ List<MeinObjekt> ist.
Wie kann ich diese List<MeinObjekt> in eine LinkedList<MeinObjekt> "kopieren"?

Durch die Methode: list=Collections.unmodifiableList(cast(o));
besitze ich ja nur lesezugriff auf die Liste.
 

redbomber

Bekanntes Mitglied
Also mir geht es z.B. um folgendes:
Ich möchte die LinkedList<MeinObjekt> von dem Assoziativspeicher in eine ArrayList<LinkedList<MeinObjekt> > kopieren, und ich versteh nicht wieso das nicht geht:

Code:
// MultiHashMap<Long,MeinObjekt> wholeObjects

Iterator<Long> it = wholeObjects.keySet().iterator();
while(it.hasNext()){
	long key = it.next();
	LinkedList<MeinObjekt> linkedList = new LinkedList<MeinObjekt>();
				
	List<MeinObjekt> list = new LinkedList<MeinObjekt>();
	list = wholeObjects.get(key);
				
	System.out.println("SIZE OF LIST " + list.size()); // -> SIZE 1
				
	for(int i = 0; i < list.size(); i++){
		System.out.println("MeinObjekt" + list.get(i) + " size " + list.size()); // SIZE 1, aber 2 Objekte sind drin
		linkedList.add((MeinObjekt)list.get(i));
	}
// ArrayList<LinkedList<MeinObjekt>> shortObjects
	shortObjects.add(linkedList);
}
 

Ebenius

Top Contributor
ABer das muss glaub wie folgt sein:
SuperHashMap<Long, MeinObjekt>
Sieht gut aus.

Wenn ich mir dann für einen Key die LinkedList<MeinObjekt> erhalten möchte habe ich das problem, dass diese immer vom Typ List<MeinObjekt> ist.
Wie kann ich diese List<MeinObjekt> in eine LinkedList<MeinObjekt> "kopieren"?
Die erste Frage ist: Brauchst Du denn wirklich eine LinkedList oder reicht Dir auch der Typ des List-Interface? Wenn Du unbedingt eine LinkedList brauchst, könntest Du die Liste einfach casten, aber das würde Wissen über die Interna der SuperHashMap voraussetzen das Du eigentlich nicht haben darfst. [HIGHLIGHT="Java"]final LinkedList<Long, MeinObjekt> linkedList = (LinkedList<Long, MeinObjekt>)
superHashMap.get(new Long(42));[/HIGHLIGHT]
Was willst Du denn danach mit der Liste machen?

BTW: Die SuperHashMap gefällt mir gar nicht, weil sie die Schnittstelle zu einer List<T, Object> abbildet, sich aber intern darauf verlässt, dass das von außen jeder ignoriert. :(

// EDIT: Du kannst natürlich die ganzen Listen alle kopieren. [HIGHLIGHT="Java"]new LinkedList<Long, MeinObjekt>(superHashMap.get(new Long(42)));[/HIGHLIGHT]

Ebenius
 

redbomber

Bekanntes Mitglied
also ich muss immer nur über die listen iterieren und auf die Objekte darin zugreifen
also keine Änderungen oder so vornehmen
 

redbomber

Bekanntes Mitglied
aber wieso meinst du folgendes:
Code:
final LinkedList<Long, MeinObjekt> linkedList = (LinkedList<Long, MeinObjekt>)
        superHashMap.get(new Long(42));

muss dass nicht so sein?


Code:
final LinkedList<MeinObjekt> linkedList = (LinkedList<MeinObjekt>)
        superHashMap.get(new Long(42));




Ich verstehe folgendes einfach nicht:
Ich möchte von meiner SuperHashMap für einen Key die LinkedList an der entsprechenden Position bekommen

[HIGHLIGHT="Java"]List<MeinObjekt> list = superHashMap.get(key);
LinkedList<MeinObjekt> linkedList = new LinkedList<MeinObjekt>();
linkedList.addAll(list);

for(int i = 0; i < linkedList.size(); i++){
System.out.println("MeinObjekt " + linkedList.get(i) + " size " + linkedList.size());
}[/HIGHLIGHT]

Hier hat meine linkedList immer die Size 1, obwohl sich aber darin z.b. 3 Objekte befinden, also das sehe ich ja am System out.
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
muss dass nicht so sein? [...]
Selbstverständlich. Hab gepennt.

Ich verstehe folgendes einfach nicht:
Ich möchte von meiner SuperHashMap für einen Key die LinkedList an der entsprechenden Position bekommen
Dann ist LinkedList die schlechteste Wahl die Du treffen kannst. Nimm eine Listenimplementierung die wahlfreien Zugriff erlaubt: RandomAccess.

Hier hat meine linkedList immer die Size 1, obwohl sich aber darin z.b. 3 Objekte befinden, also das sehe ich ja am System out.
Das verstehe ich auch nicht. Benutz einen Debugger und guck Dir alles genau an. Oder gib dir mal list.size() mit aus. Oder gib gleich list und linkedList aus, da bekommste auch einen vernünftigen String.

Ebenius
 

redbomber

Bekanntes Mitglied
Dann ist LinkedList die schlechteste Wahl die Du treffen kannst. Nimm eine Listenimplementierung die wahlfreien Zugriff erlaubt: RandomAccess.
Ne das war ein missverständnis, ich benötige nur sequentiellen Zugriff, also daher nehme ich eine LinkedList

Also ich kann das Problem jetzt wie folgt umgehen:

Code:
ArrayList<LinkedList<MeinObjekt> > arrayList = new ArrayList<LinkedList<MeinObjekt> >();

List<MeinObjekt> list = superHashMap.get(key);
LinkedList<MeinObjekt> linkedList = new LinkedList<MeinObjekt>();
if(!list.isEmpty()){
	arrayList.add(linkedList);
}

Nur erscheint mir das "kopieren" zuerst in eine List und dann das hinzufügen der List in die LinkedList als ziemlicher Speicher und Zeitverbrauch.
 

Ebenius

Top Contributor
Ne das war ein missverständnis, ich benötige nur sequentiellen Zugriff, also daher nehme ich eine LinkedList
In Deinem Quelltext oben greifst Du per Index auf die Liste mit get(int) zu. Wenn das Bestandteil des Missverständnisses ist und es sich nur um Debug-Code handelt, dann ignorier den Hinweis.

Nur erscheint mir das "kopieren" zuerst in eine List und dann das hinzufügen der List in die LinkedList als ziemlicher Speicher und Zeitverbrauch.
Mir auch. Daher die Frage, warum Du unbedingt eine LinkedList benötigst und nicht einfach die List da rein packst. Designfehler in der Schnittstelle oder Denk-/Verständnisproblem?

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaDocu in eigener Bibliothek Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
T Datei öffnen mit eigener Applikation.exe Allgemeine Java-Themen 4
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
K Jar mit eigener JRE ausliefern Allgemeine Java-Themen 13
G eigener PropertyChangedListener Allgemeine Java-Themen 2
S OOP ClassCastException bei casting von eigener Klasse aus Iterator Allgemeine Java-Themen 3
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
T Vererbung Eigener Datentyp: Betriebsmittel Allgemeine Java-Themen 2
J Erste Schritte Kommerzielle nutzung eigener Javaapplets auf der Homepage Allgemeine Java-Themen 2
B Probleme mit eigener equals Methode Allgemeine Java-Themen 18
Kr0e Eigener Updatemechanismus Allgemeine Java-Themen 7
J Mein eigener Messenger und dessen Probleme Allgemeine Java-Themen 48
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
R Eigener Comparator Allgemeine Java-Themen 2
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
B Eigener ClassLoader Allgemeine Java-Themen 9
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
P eigener Klassenname Allgemeine Java-Themen 4
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T enums - eigener startwert Allgemeine Java-Themen 5
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
P eigener Thread für einen JButton Allgemeine Java-Themen 32
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
D Eigener Maven2 Plugin Server? Allgemeine Java-Themen 3
I RSA - Eigener Quelltext Allgemeine Java-Themen 4
M eigener LautstärkeRegler schädlich für soundkarte? Allgemeine Java-Themen 4
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
L Problem mit eigener, abgeleiteter Klasse Allgemeine Java-Themen 2
S Eigener Editor Allgemeine Java-Themen 7
L Eigener Onlinestunden- Zähler / Problemchen Allgemeine Java-Themen 2
C Virtueller Speicher Allgemeine Java-Themen 36
sascha-sphw Auf GoPro Speicher zugreifen Allgemeine Java-Themen 10
TheJavaKid Mit Java die Festplatte mit dem meisten freien Speicher finden Allgemeine Java-Themen 7
J Strings int textdokumente speicher Allgemeine Java-Themen 3
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
L Input/Output Datei in den Speicher lesen. Allgemeine Java-Themen 9
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
M Speicher der VM Allgemeine Java-Themen 4
W PDFBox "Nicht genügend Speicher" Allgemeine Java-Themen 2
S Speicher-Problem Allgemeine Java-Themen 4
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
V Input/Output BufferedI/OStream leert den Speicher Allgemeine Java-Themen 7
G Speicher erhöhen Allgemeine Java-Themen 10
R Programm frisst 'Virtuellen Speicher' wie PacMan Allgemeine Java-Themen 4
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
A 2D-Grafik 2MB jpg wird zu 300MB im speicher (fehler) Allgemeine Java-Themen 8
E Speicherverwaltung bzw. Speicher wieder frei geben?! Allgemeine Java-Themen 8
D Speicher beim Start zuweisen Allgemeine Java-Themen 10
S Bei Sortierung Speicher zu gering? Allgemeine Java-Themen 8
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
S JAR Datei, mehr Speicher bereitstellen Allgemeine Java-Themen 5
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
E Speicher frei machen (List) Allgemeine Java-Themen 9
J Speicher Probleme vorbeugen Allgemeine Java-Themen 8
C Laden / Speicher Allgemeine Java-Themen 8
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
S Zugesicherter Speicher der jvm nach Programmstart erhöhen Allgemeine Java-Themen 6
G FIFO Speicher nachbilden Allgemeine Java-Themen 2
G restlichen freien Speicher ermitteln? Allgemeine Java-Themen 3
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
J Wieviel Speicher maximal? Allgemeine Java-Themen 14
T Sortierter assoziativer Speicher mit Filter Allgemeine Java-Themen 4
L JVM: Speicher wieder für OS freigeben? Allgemeine Java-Themen 5
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
O Datei im Speicher halten Allgemeine Java-Themen 4
C Speicher Problem Allgemeine Java-Themen 3
S TreeSet benötigt zu viel Speicher Allgemeine Java-Themen 5
J Out Of Memory - Speicher vergrößern? Allgemeine Java-Themen 2
L Nutzt Java bei Start der VM übermäßig viel Speicher? Allgemeine Java-Themen 3
F CPU auslastung wenn Speicher mit -Xmx erhöht Allgemeine Java-Themen 4
S Auslagerungsdatei (Speicher) werde voll Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
S Speicher Allgemeine Java-Themen 2
m@nu doppelte daten im speicher? Allgemeine Java-Themen 2
G Speicher Allgemeine Java-Themen 3
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
A Speicher/Anzeige Problem in JTable Allgemeine Java-Themen 2
D Speicher der VM für ausführbares Jarfile erhöhen Allgemeine Java-Themen 4
D Eine geladene Klasse aus dem Speicher holen? Allgemeine Java-Themen 9
J in file schreiben frisst den speicher Allgemeine Java-Themen 5
P benötigter Speicher für Objekt Allgemeine Java-Themen 5
D Wieviel Speicher kann die VM verwalten? Allgemeine Java-Themen 18
C Über C/C++ (JNI) angeforderten Speicher wieder frei geben Allgemeine Java-Themen 3
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
B Kostet das speichern von Variablen zusätzlichen speicher? Allgemeine Java-Themen 2
T Speicher für die VM ändern Allgemeine Java-Themen 17
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
H Wie Cpu- und Speicher- Auslastung in Java auslesen Allgemeine Java-Themen 4
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben