Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam wszystkich.
Więc, mam taki problem do zrealizowania w javie. Program, w którym jest 10 list, każda po 250k lub 500k elementów typu Long. Do tego listy są wypełniane liczbami losowymi z zakresu 0 - 9999999999. (na razie, w fazie prób przyjmuję listy o wpisanej "na sztywno" długości 250k )
Dostaję taki oto złowieszczy komunikat:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.lang.Long.valueOf(Unknown Source) at Program.main(Program.java:19)
"Podręcznikowe" (czyt. znalezione w sieci) sposoby na zwiększenie przydziału pamięci przy uruchamianiu programu nic nie dają, lapek ma 1 GB ram więc za bardzo też nie poszaleję, chyba że chcę żeby się biedaczek zasapał.
Aha, podobno najlepszą strukturą do przechowania 10 list jest HashMap, także takie rozwiązanie przyjęłam. Nie da się w pętli zrobić 10 list o różniących się nazwach. HashMap pozwala je identyfikować kluczem. Jeśli ktoś bardziej doświadczony rzuci inne propozycje - chętnie je przyjmę.
Przedstawiam kod (po 2k poprawkach więc możliwe że gdzieś jest jakaś bzdura), pogrubiłam linijkę w której się wywala:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; public class Program { public static void main(String[] args) { long min =0L; long max =9999999999L; Random rand = new Random(); Map<Integer, List> mapa = new HashMap<Integer, List>(); for(int n=0; n<=9; n++){ int x = 250000; List<Long> lista = new ArrayList<Long>(); for(int a=0; a<x; x++){ long zm =min+((long)(rand.nextDouble()*max)); lista.add(zm); //Tu się wywala.. } mapa.put(n,lista); //wrzucamy liste do HashMap'a } System.out.println(mapa.size()); //dla sprawdzenia, ale do tego momentu nie dochodzi :) } }
Pierwszy raz spotykam się z takim wyjątkiem. Java zaskakuje..
pzdr.
Ostatnio edytowany przez Trin (2012-11-15 19:41:00)
Offline
W pętli licznikiem jest "a" a inkrementujesz "x"
nie ma za co ;)
//EDIT: Polecam debugowanie przez wypisywanie zmiennej, wystarczyło by dodać
System.out.println("a=" + a);
nad linią która się wywala i sama byś do tego doszła...
Ostatnio edytowany przez milyges (2012-11-15 21:23:26)
Offline
milyges napisał(-a):
nie ma za co ;)
Dziękuję!!! Nie ma to jak świeże spojrzenie na kod :)
Offline