2010-06-04 18 views

Odpowiedz

13

Mapa jest przeznaczona do normalnego klucz-wartość zużycia pary w kodzie. Właściwości są zwykle używane do przechowywania i ładowania wartości konfiguracyjnych z pliku. Podstawowa implementacja właściwości wykorzystuje mapę.

Zobacz poniższy link, aby zapoznać się z krótkim samouczkiem dotyczącym sposobu i czasu korzystania z funkcji Właściwości.

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html

0

Properties jest wykorzystywany głównie do danych i konfiguracji opartych na lokalizacji, a mapa jest bardziej ogólnego przeznaczenia.

0

Zgodnie z docs,

  • Map jest interfejsem
  • Properties to klasa, która implementuje interfejs, który
0

Właściwości IS-mapę, która IS-hashtable. To, czy powinno, czy nie, to inne pytanie - myślę, że naprawdę powinien dostać Mapę poprzez kompozycję, a nie zaimplementować interfejs Mapy.

Klasa właściwości jest dla plików właściwości - dlatego ma metody ładowania, aby odczytać plik. Więc jeśli pracujesz z plikami właściwości, np.

propa = bob 
propb = jane 

następnie użyj Właściwości. W przeciwnym razie będziesz chciał stworzyć własny interfejs mapy i wybrać odpowiednią implementację, np. HashMap

+3

Retribution: Właściwości IS-A Hashtable, która jest mapą IS-A. – BalusC

2

Użyj klasy implementującej interfejs mapy, ale nie jest klasą właściwości. Klasa właściwości jest zepsuta. Ponieważ pod spodem znajduje się Hashtable, istnieją metody, które łamałyby spójne odwzorowanie String-to-String. Jego niezmiennik jest bardzo łatwo zepsuty (zarówno błędnie, jak i celowo). Użyj czegokolwiek innego implementującego interfejs mapy. Jeśli celujesz w bezpieczeństwo wątków - użyj Collections.synchronizedMap (myUnsyncdMap), aby je utworzyć.

Idealnie nie ma różnicy między dwiema klasami innymi niż jedna lub dwie metody wymienione w innych odpowiedziach. Jednak implementacja właściwości jest rzeczywiście dziwaczna - inne klasy, pochodzące z interfejsu mapy, są o wiele bezpieczniejsze, zapewniają lepsze pisanie statyczne i prawdopodobnie są szybsze (w zależności od potrzeb). Biorąc okiem na realizację (konkretnie jakiej klasy to wywodzi) powinno wystarczyć, aby przekonać się, aby tego uniknąć :)

12

Properties jest Facade dla Map<String,String> + niektóre metody I/O.

Czy potrzebujesz metod we/wy? użyj go: nie rób tego.

0

A za kluczowy domyślnego systemu to kolejna cecha Properties nie jest obecny w Hashtable. Np .:

Properties p0 = new Properties(); 
p0.setProperty("a", "0"); 
p0.setProperty("b", "1"); 
Properties p1 = new Properties(p0); 
p1.setProperty("a", "10"); 
assert p1.getProperty("a").equals("10"); 
assert p1.getProperty("b").equals("1"); 
assert p1.getProperty("c") == null; 

Wartości domyślne są wyszukiwane rekursywnie we właściwościach nadrzędnych.

Powiązane problemy