jaki obiekt na przechowywanie klucz - wartosc1, wartosc2

0

hej, zastanawiam sie z czego powinnam skorzystac do utworzenia "tablicy" ktora przechowywalaby:
jako klucz integery, zgodne z kolejnoscia dodania, czyli od 0.. do n, a jako wartosc mialaby 2 wartosci?

np:
[0] posiada wartosc01, wartosc02
[1] posiada wartosc11, 12

wazna jest zeby bylo szybkie przy operacjach wyciagania

z gory dzieki za sugestie,
pzdr,
misty

czy taki obiekt:

ArrayList<Double[]> a= new ArrayList();

jest akceptowalny? (wartosci - wartosc1, wartosc2 - beda typu double). czy powinnam korzystac koniecznie z map?

0

Czy tobie przypadkiem nie chodzi o zwykłą tablice dwuwymiarową???

0

ArrayList jest niezły, ale musisz ją pozbawić możliwości usuwania elementów, bo inaczej się posypie spójność danych.

0

hm a nie może być arraylista przetrzymująca Twój obiekt z tymi 2ma polami?

//edit: szybki Koziołek ; )

0

hmm a moze: ArrayList<HashMap[]> a2= new ArrayList();

Koziolek,co masz na mysli piszac:

musisz ją pozbawić możliwości usuwania elementów, bo inaczej się posypie spójność danych.
?

0

@misty, obiekt A wstawił sobie na pozycję X jakąś wartość. Następnie trzyma sobie ten X i przez niego odwołuje się do wartości. Następnie obiekt B stwierdził, że X jest w sumie nie potrzeby i go usunął. Teraz obiekt A próbując pobrać wartość znajdującą się na X ma dwie drogi:

  1. pobiera wartość nieprawidłową i jest w pełni przekonany, że pobrał dobrą, bo nie wie, że B wywalił X
  2. X było ostatnim elementem tablicy i próba pobrania X powoduje przekroczenie zakresu, błąd, wywalenie się programu, awarię reaktora i mamy drugi Czarnobyl... ups... się zapędziłem...

Dlatego ja bym zrobić tak:

class MyArrayList<T> extends ArrayList<T>{

	@Override
	public T remove(int index) {
		return null;
	}

	@Override
	public boolean remove(Object o) {
		return false;
	}

	@Override
	public boolean removeAll(Collection<?> c) {
		return false;
	}
}

I używał takiej wykastrowanej z funkcjonalności klasy.

0

Chodzi o to, ze jesli usuniesz z ArrayList element o podanym kluczu, to wszystkim elementom za nim klucz zmniejszy sie o 1.
Przyklad:

  1. 5 przechowywanych elementow ma klucze 0-4
  2. usuwasz element o kluczu 2
  3. 4 przechowywane elementy maja klucze 0-3, nowo dodany otrzyma klucz 4

Jesli wazna jest spojnosc danych, to po wykonaniu punktu 2 nalezy oczekiwac takiego punktu 3:
3. 4 przechowywane elementy maja klucz 0, 1, 3, 4, nowo dodany otrzyma klucz 5

Jedynie kwestia, czy dla Ciebie spojnosc danych jest wazna (nie do konca mozna to wywnioskowac po tresci pytania, choc domyslam sie co Koziolkowi to zasugerowalo)

0

aa ok. ale taka sytuacja nie zaistnieje. Ogolnie jest tak, ze mam sobie watek i on musi miec tablice takich wartosci (wlasnie ta tablica o ktorej pisalam). i tylko ten watek bedzie z niej czytal i do niej pisal. a po pewnym czasie bedzie zerowal. nie bedzie sytuacji ze do tej tablicy bedzie mial dostep inny watek/obiekt/cokolwiek, poniewaz wynika to z zalozen programu.

dzieki za podpowiedzi

0

Szybkie byłoby posługiwanie się dwiema tablicami mające te same indeksy, ale w pierwszej wartości pierwsze, a w drugiej drugie.
To jest szybsze i bardziej oszczędne niż pakowanie na stertę serię małych obiektów z polami będącymi wskaźnikami do serii innych małych obiektów na stercie. Poza tym można się posłużyć również indeksami int oraz liczbami double i w rezultacie można przeprowadzić obliczenia na stosie za pomocą tablic lokalnych (oczywiście o ile zadanie i algorytm na to pozwoli).
Jedynym minusem jest pilnowanie aby wszelkie operacje przeprowadzać równocześnie na obu tablicach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1