Newsgroup: it.comp.java
Titolo: new HashMap<Integer, String>()

Salve, devo creare una lista di oggetti numerati...
ho provato con
new HashMap<Integer, String>(),
però mi da
java.lang.OutOfMemoryError: Java heap space
essendo obbligato ad utilizzare Stringhe per specificare gli oggetti
come posso fare?


p.s.
ho provato a sostituire
String [] array = new String [numeroelementi];
array[numero] = nome;
al posto di HashMap, ma l'errore rimane

 java.lang.OutOfMemoryError: Java heap space
L'errore che hai non č certo legato a quell'inizializzazione. Verifica 
quanti oggetti stai allocando. Non ho capito la storia delle stringhe 
per specificare gli oggetti ma il problema non č di sicuro neanche lě. 
Quanti oggetti stai mettendo dentro la hashmap?
pole
-- 
ammentos - a lightweight persistence framework for JDK5
http://ammentos.biobytes.it
Flash tutorial: 
http://ammentos.biobytes.it/quickstart/quickstart.html

> Quanti oggetti stai mettendo dentro la hashmap?
sono 575.100, però so di sicuro che se fossero
HashMap<Integer, Integer>() anzichè stringhe il problema non
nascerebbe... presumo per la grandezza (in byte) che necessita un
Integer in confronto ad una String...

> Quanti oggetti stai mettendo dentro la hashmap?
E> sono 575.100, però so di sicuro che se fossero HashMap<Integer,
E> Integer>() anzichè stringhe il problema non nascerebbe... presumo
E> per la grandezza (in byte) che necessita un Integer in confronto ad
E> una String...
Aumenta la memoria virtuale disponibile e quella che la JVM può usare.
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software

 Integer in confronto ad una String...
Vabbé ma se a te servono le stringhe e non integer un motivo ci sarà, 
per cui bisogna rassegnarsi a cercare un'altra strada.
Di che stringhe si tratta? Cosa contengono? Possono esserci valori 
ripetuti e se sì in quali proporzioni?


 ripetuti e se sì in quali proporzioni?
sono stringhe di titoli di libri, quindi non esistono valori ripetuti,
essendo essi tutti diversi...

Se questa lista ti serve solo perchè la devi presentare a video,
allora ti conviene paginare. Ossia, ad esempio ne estrai solo 100 alla
volta.

 essendo essi tutti diversi...
Beh a questo punto c'č poco da fare: o aumenti la RAM o cambi metodo :) 
Suggerirei caldamente l'utilizzo di un db d'appoggio, magari embedded 
come hsqldb in modo da non complicare la struttura dell'applicazione.


> usare.
E> io uso Eclipse e se per memoria JVM intendi dire di aumentare in
E> eclipse.ini il valore della memoria max che può utilizzare è già al
E> massimo ovvero 860 Mb, di più non posso perchè ho 1Gb di ram...
E lo swap a che serve :) ?


 volta.
no, mi serve perchè in un secondo momento potessi andare a estrarre i
dati in essa contenuti...
In pratica la utilizzavo perchè potessi creare il rapporto fra il
numero (la posizione nell'array) e il contenuto (il titolo del libro).
così quando mi serviva il titolo non dovevo andare a cercare nel file
originario che conteneva tutti i titoli, ma semplicemente tramite la
posizione nell'array...

> E lo swap a che serve :) ?
swap? non capisco...

 posizione nell'array...
Sì...ma la scelta come avviene? Tramite interfaccia grafica, no?
Visto che i titoli non li ordini, l'ordinamento rispecchia quello del
sistema persistente (file presumo) da cui l'hai caricati. Allora basta
che ti porti "su" solo l'indice progressivo e poi ricerchi con quello.

> Sì...ma la scelta come avviene? Tramite interfaccia grafica, no?
no, la scelta avviene tramite un'altro programma che viene eseguito in
precedenza, che calcola dei valori che vengono assegnati a tali libri e
quindi me li ordina in questo ordine...
quindi l'ordine con i quali i titoli vengono estratti è per forza
diverso dall'ordine che avevano in origine (nel file dove risiedono
tali titoli, appunto).

> E lo swap a che serve :) ?
E> swap? non capisco...
AFAIK, La JVM  da out of memory se raggiunge  il massimo indicato (per
default 64m,  max 2000m impostabile con  -Xmxn) o il  sistema dice che
non c'è più memoria (virtuale) "whatever comes first".
La sola ram non c'entra.


> Sě...ma la scelta come avviene? Tramite interfaccia grafica, no?
E> no, la scelta avviene tramite un'altro programma che viene eseguito
E> in precedenza, che calcola dei valori che vengono assegnati a tali
E> libri e quindi me li ordina in questo ordine...  quindi l'ordine
E> con i quali i titoli vengono estratti č per forza diverso
E> dall'ordine che avevano in origine (nel file dove risiedono tali
E> titoli, appunto).
E se usassimo una tabella di appoggio su un DB ? Qualcosa mi dice che
il peggioramento delle prestazioni non sarebbe cosě tragico...


 tali titoli, appunto).
Uno di noi due ha le idee un po' confuse.
L'ordinamento del sottoinsieme risultato finale della tua operazione
NON ha a che fare con l'ordinamento dei libri-record. Ossia, che il
sistema chiede a te i libri 3-7-2-4 è irrilevante se per te 3 è
comunque il terzo record, 7 il settimo è così via. Così come te li
chiede, così li estrai. Ed inoltre, anche se fosse che a te chiede un
ordine casuale ma poi li vuol vedere ordinati, puoi sempre prima
estrarre il sottoinsieme e poi ordinarlo.

 Integer in confronto ad una String...
Scusa, per caso utilizzi questo oggetto in una webapp e lo metti in
sessione? :-P

 il peggioramento delle prestazioni non sarebbe così tragico...
ecco... e se non sapessi farlo...  cosa mi consiglieresti?