Thread View: pl.comp.lang.java
7 messages
7 total messages
Started by Jacek Czerwinski
Sat, 05 May 2012 07:27
Taka kolekcja/kontener: Vector i Map
Author: Jacek Czerwinski
Date: Sat, 05 May 2012 07:27
Date: Sat, 05 May 2012 07:27
17 lines
1567 bytes
1567 bytes
Czy jest w bibliotekach z kolekcjami takie "coś" co pozwala: a) dodawać obiekty na sposób Listy/Vectora na końcu lub ze świadomym rozpychaniem i odczytywać po indeksie int. b) zarazem żeby były dostępne jako Map<String,T>. Pewnie w konsekwencji b) dodawane obiekty by musiały by mieć pewien wyróżnik, klucz żeby się mogły 'przedstawić'. Więc mają, tylko pojemnik musi o tym wiedzieć. Gdyby oprzeć to o Map, dostęp po indeksie by musiał być w kolejności dodawania (więc nie hash, alfabetycznie itd) plus mozliwość rozsuwania. Pewnie że da się to napisać, tylko po co. W C# mam kilka API gdzie elementy są dostępne z tablicy [int] i [string] jednocześnie, i bardzo mi się podoba. Operatora tablicowego oczywiście w Javie nie przeskoczę.
Re: Taka kolekcja/kontener: Vector i Map
Author: Jacek Czerwinski
Date: Sat, 05 May 2012 08:50
Date: Sat, 05 May 2012 08:50
16 lines
1549 bytes
1549 bytes
W dniu 2012-05-05 09:27, Jacek Czerwinski pisze: > Gdyby oprzeć to o Map, dostęp po indeksie by musiał być w kolejności > dodawania (więc nie hash, alfabetycznie itd) plus mozliwość rozsuwania. > > Pewnie że da się to napisać, tylko po co. Zrobiłem sobie na kolanie MapWithBenefits<T> extends HashMap<String, T> z prywatną listą dla drugiej funkcjonalności mentalnie pożegnałem się z inteligentnym put(T) i będzie put(String,T) zastanawiam się, jak w tym "wiekopomnym" kodzie wyeliminować API ujawniające przypadkową dla mnie kolejność z oryginalnego Map (putAll, entrySet ). W C++ bym obniżył dostępność do private i by było.
Re: Taka kolekcja/kontener: Vector i Map
Author: Arivald
Date: Sat, 05 May 2012 09:15
Date: Sat, 05 May 2012 09:15
38 lines
2504 bytes
2504 bytes
W dniu 2012-05-05 10:50, Jacek Czerwinski pisze: > W dniu 2012-05-05 09:27, Jacek Czerwinski pisze: > >> Gdyby oprzeć to o Map, dostęp po indeksie by musiał być w kolejności >> dodawania (więc nie hash, alfabetycznie itd) plus mozliwość rozsuwania. >> >> Pewnie że da się to napisać, tylko po co. > > Zrobiłem sobie na kolanie > MapWithBenefits<T> extends HashMap<String, T> > z prywatną listą dla drugiej funkcjonalności > > mentalnie pożegnałem się z inteligentnym put(T) i będzie put(String,T) > > zastanawiam się, jak w tym "wiekopomnym" kodzie wyeliminować API > ujawniające przypadkową dla mnie kolejność z oryginalnego Map (putAll, > entrySet ). W C++ bym obniżył dostępność do private i by było. > Utwórz nowy obiekt, implementujący Map<String, T> i List<T>. Wewnątrz umieść prywatne Map i List, dowolnych typów (np HashMap i LinkedList). Eclipse Ci wygeneruje listę metod do zaimplementowania, po prostu wydeleguj implementację do Mapy i Listy, pilnując wewnętrznych zależności. Po prostu ten sam obiekt (referencję do niego) trzymaj jednocześnie w Liście i Mapie. > mentalnie pożegnałem się z inteligentnym put(T) i będzie put(String,T) To możesz załatwić wzorcem strategii, tzn dodatkowy obiekt (może być singleton czy statyczne klasa), który dostaje obiekt T i zwraca string który będzie kluczem mapy. Strategia może być jako typ generyka (ListMap<T, , Strategy>). -- Arivald
Re: Taka kolekcja/kontener: Vector i Map
Author: Jacek Czerwinski
Date: Sat, 05 May 2012 09:36
Date: Sat, 05 May 2012 09:36
34 lines
2482 bytes
2482 bytes
W dniu 2012-05-05 11:15, Arivald pisze: > W dniu 2012-05-05 10:50, Jacek Czerwinski pisze: > Utwórz nowy obiekt, implementujący Map<String, T> i List<T>. Wewnątrz > umieść prywatne Map i List, dowolnych typów (np HashMap i LinkedList). > Eclipse Ci wygeneruje listę metod do zaimplementowania, po prostu > wydeleguj implementację do Mapy i Listy, pilnując wewnętrznych zależności. > > Po prostu ten sam obiekt (referencję do niego) trzymaj jednocześnie w > Liście i Mapie. Idę tą ścieżką (akurat odziedziczyłem po (Hash)Map z pewnych względów, również mniejsza ilośc metod do zaimplementowania). List siedzi w środku i referencje trzymam 2x. Wchodząc w las, zaczyna lekko przeszkadzać, dwa odpowiedniki np. 'put' itd. Rzecz w tym, że zewnętrzny interface jaki implementuje byłby nieco nadmiarowy. Więc Zewnętrznie nie trzymam interfejsu List, jedyne co mam podobne to putAt(int pos, String key, T y) być może przyjdzie potrzeba na toArray i podobne metody listowe, ale na razie nie. > > > mentalnie pożegnałem się z inteligentnym put(T) i będzie put(String,T) > > To możesz załatwić wzorcem strategii, tzn dodatkowy obiekt (może być > singleton czy statyczne klasa), który dostaje obiekt T i zwraca string > który będzie kluczem mapy. > Strategia może być jako typ generyka (ListMap<T, , Strategy>). Na pewno jakaś wskazówka, ale na przyszłość. Szkoda, że w czystej javie nie można podać "pola" (jako ktoś kibicował JPA2 Criteria to wie)
Re: Taka kolekcja/kontener: Vector i Map
Author: Arivald
Date: Sat, 05 May 2012 12:21
Date: Sat, 05 May 2012 12:21
23 lines
2067 bytes
2067 bytes
W dniu 2012-05-05 11:36, Jacek Czerwinski pisze: > W dniu 2012-05-05 11:15, Arivald pisze: >> W dniu 2012-05-05 10:50, Jacek Czerwinski pisze: > >> Utwórz nowy obiekt, implementujący Map<String, T> i List<T>. Wewnątrz >> umieść prywatne Map i List, dowolnych typów (np HashMap i LinkedList). >> Eclipse Ci wygeneruje listę metod do zaimplementowania, po prostu >> wydeleguj implementację do Mapy i Listy, pilnując wewnętrznych >> zależności. >> >> Po prostu ten sam obiekt (referencję do niego) trzymaj jednocześnie w >> Liście i Mapie. > > Idę tą ścieżką (akurat odziedziczyłem po (Hash)Map z pewnych względów, > również mniejsza ilośc metod do zaimplementowania). Nie, robisz inaczej. W mojej metodzie nie musisz mieć pełnej funkcjonalności Mapy, a w szczególności nie musi to być HashMapa. Odpowiednia wersja konstruktora pozwoli nawet na dobranie typów mapy i listy do konkretnego zastosowania. -- Arivald
Re: Taka kolekcja/kontener: Vector i Map
Author: A.L.
Date: Sat, 05 May 2012 22:22
Date: Sat, 05 May 2012 22:22
30 lines
1933 bytes
1933 bytes
On Sat, 05 May 2012 09:27:43 +0200, Jacek Czerwinski <x@y.z.pl> wrote: >Czy jest w bibliotekach z kolekcjami takie "coś" co pozwala: >a) dodawać obiekty na sposób Listy/Vectora na końcu lub ze świadomym >rozpychaniem i odczytywać po indeksie int. >b) zarazem żeby były dostępne jako Map<String,T>. >Pewnie w konsekwencji b) dodawane obiekty by musiały by mieć pewien >wyróżnik, klucz żeby się mogły 'przedstawić'. Więc mają, tylko pojemnik >musi o tym wiedzieć. > >Gdyby oprzeć to o Map, dostęp po indeksie by musiał być w kolejności >dodawania (więc nie hash, alfabetycznie itd) plus mozliwość rozsuwania. > >Pewnie że da się to napisać, tylko po co. > > >W C# mam kilka API gdzie elementy są dostępne z tablicy [int] i [string] >jednocześnie, i bardzo mi się podoba. Operatora tablicowego oczywiście w >Javie nie przeskoczę. > > > Nie wiem o co ci chodzi, ale sprawdz http://commons.apache.org/collections/api-release/index.html konkretnie ListOrderedMap. Moze to to?.. A.L.
Re: Taka kolekcja/kontener: Vector i Map
Author: Jacek Czerwinski
Date: Sun, 06 May 2012 08:18
Date: Sun, 06 May 2012 08:18
14 lines
1305 bytes
1305 bytes
W dniu 2012-05-06 00:22, A.L. pisze: > On Sat, 05 May 2012 09:27:43 +0200, Jacek Czerwinski<x@y.z.pl> wrote: > > Nie wiem o co ci chodzi, ale sprawdz > > http://commons.apache.org/collections/api-release/index.html > > konkretnie ListOrderedMap. Moze to to?.. Ideał ... by był, jakby używali literki T :P Sporo jest fajnego kodu, które jednak się zestarzał.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads