Zbiór to zbiór danych, w którym można szybko znaleźć istniejący element. Aby to jednak zrobić, musisz mieć dokładną kopię wymaganego elementu. Ten rodzaj wyszukiwania nie jest zbyt powszechny, ponieważ zwykle znane są tylko pewne informacje (klucz), które można wykorzystać do znalezienia odpowiedniego elementu. Specjalnie w tym celu zaprojektowano strukturę danych obsługującą mapowanie, zwaną także mapą. Mapa przechowuje pary klucz-wartość. Każdą wartość można znaleźć po jej kluczu. Na przykład tabela może zawierać rekordy zawierające informacje o pracownikach, gdzie kluczami są numery identyfikacyjne pracowników, a wartościami są obiekty Pracowników.
Biblioteka Java udostępnia dwie główne implementacje map: mapę skrótów HashMap i mapę drzewa. Obie klasy implementują interfejs Map.
Na mapie skrótów klucze są rozmieszczone losowo, natomiast na mapie drzewa są w ściśle określonej kolejności. Funkcja skrótu, czyli funkcja porównania, jest stosowana tylko do kluczy, a wartości odpowiadające tym kluczom nie są mieszane ani porównywane.
Którą kartę wybrać? Podobnie jak w przypadku zestawów, mieszanie jest nieco szybsze, dlatego zaleca się jego stosowanie tam, gdzie kolejność kluczy nie ma znaczenia.
Poniżej przedstawiono sposób tworzenia mapy skrótów do przechowywania informacji o pracownikach.< String, Employee>Personel mapy = nowy HashMap
(); //HashMap implementuje interfejs mapy Pracownik harry = new Employee(„Harry Hacker”); personel.put(“987-98-9996”, Harry);
Podczas dodawania obiektu do mapy należy również określić jego klucz. W tym przypadku kluczem jest ciąg znaków, a odpowiadająca mu wartość to obiekt Pracownik.
Aby uzyskać dostęp do obiektu, musisz użyć klucza.
Ciąg s = „987-98-9996”; Pracownik e = staff.get(s);//czyta wpis Harry'ego
Jeśli w zestawie danych nie ma danych odpowiadających określonemu kluczowi, metoda get() zwraca wartość null. Klucze muszą być unikalne: nie można przechowywać dwóch wartości za pomocą tego samego klucza. Jeśli dwukrotnie wywołasz metodę put() z tym samym kluczem, druga wartość po prostu zastąpi pierwszą. Dodatkowo metoda put() zwraca poprzednią wartość zapisaną pod określonym kluczem.
Metoda usuwania() usuwa element z mapy, a metoda size() zwraca liczbę elementów na mapie.
W architekturze zbioru danych sama mapa nie jest uważana za zbiór. (W innych architekturach struktury danych za mapę uważa się zbiór par, czyli wartości indeksowanych kluczami). Jednakże biblioteka Java umożliwia użycie widoku mapy, który implementuje interfejs Collection lub jeden z jego interfejsów podrzędnych.
Istnieją trzy typy reprezentacji: jako zestaw kluczy, zestaw wartości (który nie jest zbiorem) lub zestaw par klucz-wartość. Klucze i pary klucz-wartość tworzą zestaw, ponieważ na mapie może istnieć tylko jedno unikalne wystąpienie obiektu klucza. Metody wymienione poniżej zwracają te trzy typy widoków map.
(Elementy ostatniego zestawu par klucz-wartość są obiektami klasy wewnętrznej Map.Entry) Należy zauważyć, że zestaw kluczy nie jest obiektem HashSet ani TreeSet, ale jest obiektem innej klasy, która implementuje interfejs Set Interfejs Set rozszerza interfejs Collection. Dlatego możesz użyć metody keySet().
Na przykład możesz iterować po wszystkich klawiszach mapy:
Ustaw klucze = map.keySet(); for (String klucz: klucze) ( //akcje za pomocą klawisza)
Jeśli chcesz jednocześnie przeglądać klucze i wartości, możesz uniknąć konieczności sprawdzania wartości, wyświetlając listę wszystkich rekordów. Aby to zrobić, możesz użyć następującego fragmentu kodu:
For (Wpis Map.Entry: staff.entrySet()) ( Klucz ciągu = wpis.getKey(); Wartość pracownika = wpis.getValue(); //akcje z kluczem i wartością)
Klasa WeakHashMap luźno buforowanych map skrótów została opracowana w celu rozwiązania interesującego problemu. Co dzieje się z wartością, której klucz nie jest już używany w programie, na przykład dlatego, że zniknęło ostatnie odwołanie do tego klucza? W takim przypadku nie można już uzyskać dostępu do obiektu wartości. A ponieważ ten klucz nie jest już zawarty w żadnym miejscu programu, nie ma możliwości usunięcia jego pary klucz-wartość z mapy. Ale dlaczego nie może tego usunąć system śmieciarki, którego zadaniem jest usuwanie nieużywanych przedmiotów?
Niestety, nie jest to takie proste. Funkcja usuwania elementów bezużytecznych systemu zarządzania pamięcią monitoruje aktywne obiekty. Gdy obiekt mapy jest aktywny, aktywne są także wszystkie komórki mapy. Tym samym program sam musi zadbać o usunięcie niewykorzystanych wartości z aktywnych map. Właśnie do tego została zaprojektowana klasa WeakHashMap. Ta struktura danych współdziała z systemem zbierania elementów bezużytecznych w celu usunięcia par klucz-wartość, dla których jedynym odniesieniem do klucza jest wpis w tabeli mieszającej.
Tak działa ten mechanizm. Klasa WeakHashMap używa słabych referencji do przechowywania kluczy. Obiekt WeakReference zawiera referencję do innego obiektu, tj. w tym przypadku do klucza tablicy mieszającej. Zazwyczaj, jeśli wyrzucanie elementów bezużytecznych wykryje, że do obiektu nie ma odwołania, obiekt ten jest usuwany. A jeśli jedyne odniesienie do obiektu jest typu WeakReference, to słabe odniesienie jest umieszczane w kolejce. Okresowo sprawdza, czy w kolejce nie ma nowych linków, gdyż oznacza to, że klucz nie jest już używany i jego obiekt można usunąć. Zatem klasa WeakHashMap usuwa wartość odpowiadającą temu kluczowi.
JDK 1.4 wprowadził klasy LinkedHashSet i LinkedHashMap, które zapamiętują kolejność, w jakiej nowe elementy są wstawiane do zbioru danych. Dzięki temu kolejność elementów tabeli nie wygląda już na przypadkową. W miarę dodawania rekordów do tabeli tworzą one listę podwójnie połączoną.
Rozważmy na przykład mapę:
Laska mapy = nowa LinkedHashMap(); Staff.put(“144-25-5464”, nowy pracownik(“Amy Lee”)); Staff.put(“567-24-2546”, nowy pracownik(“Harry Hacker”)); Staff.put („157-62-7935”, nowy pracownik („Gary Cooper”)); Staff.put(“456-62-5527”, nowy pracownik(“Francesca Cruz”));
Iterator staff.ketSet().iterator() wyświetli listę swoich kluczy w następującej kolejności: 144-25-5464 567-24-2546 157-62-7935 456-62-5527
A iterator staff.values().iterator() wyświetli jego wartości w następujący sposób: Amy Lee Harry Hacker Gary Cooper Francesca Cruz
Połączona mapa mieszająca może zapamiętać kolejność dostępu i wziąć ją pod uwagę podczas iteracji po elementach. Za każdym razem, gdy wywołujesz funkcję get() lub put(), wpis, którego dotyczy, jest usuwany ze swojej pozycji i przenoszony na koniec połączonej listy. Operacje te zmieniają strukturę połączonej listy, ale nie komórek tabeli mieszającej. Rekord pozostaje w komórce odpowiadającej kodowi skrótu klucza. Aby utworzyć taką mapę skrótów, należy użyć następującego wyrażenia:
Połączona mapa Hash
Znajomość kolejności dostępu jest niezbędna np. do utworzenia pamięci podręcznej działającej na zasadzie „ostatnio użytej”. Na przykład możesz chcieć przechowywać w pamięci najczęściej używane rekordy i pobierać z bazy danych te, do których rzadko uzyskujesz dostęp. Jeśli nie znajdziesz wpisu w tabeli, a tabela jest już dość pełna, możesz użyć iteratora, aby usunąć kilka pierwszych elementów. Elementy te są używane rzadziej niż inne.
JDK 1.4 dodał kolejną specjalną klasę, IdentityHashMap, która wykonuje indywidualne hashowanie. Kody skrótu zawartych w nim kluczy są obliczane nie metodą hashCode(), ale metodą System.identityHashCode(). Ta metoda oblicza kod skrótu na podstawie adresu obiektu w pamięci. Ponadto klasa IdentityHashMap do porównywania obiektów używa operatora == zamiast metody równości().
Innymi słowy, różne obiekty są uważane za różne od siebie, nawet jeśli ich zawartość jest taka sama. Ta klasa jest przydatna do implementowania algorytmów przechodzenia przez obiekty (na przykład serializacji), które wymagają śledzenia nawet tych obiektów, które zostały już przebyte przez iterator.
Klasa Collections zawiera metody tworzące niemodyfikowalne widoki zbiorów danych. Widoki te realizują kontrolę istniejącego zestawu, która jest wykonywana na etapie wykonywania programu. Podczas próby zmodyfikowania zestawu zgłaszany jest wyjątek, a zestaw danych pozostaje niezmieniony.
Aby uzyskać niemodyfikowalne reprezentacje mapy, stosuje się następujące metody:
Kolekcje.niemodyfikowalnaMapa Kolekcje.niemodyfikowalnaSortedMap
Załóżmy na przykład, że chcesz, aby jakiś fragment kodu był wyświetlany, ale nie dotykał zawartości zbioru danych. Aby to zrobić, wykonaj następujące kroki:
Mapa
Metoda Collections.unmodifyingMap zwraca instancję klasy implementującej interfejs Map. Akcesor tej klasy pobiera wartości ze zbioru pięciolinii Oczywiście metoda lookAt() może wywołać wszystkie metody zadeklarowane w interfejsie Map. Jednak wszystkie metody modyfikujące zostały ponownie zdefiniowane, tak aby zamiast uzyskiwać dostęp do podstawowego zestawu, zgłaszały wyjątek UnsupportedOperationException.
Niemodyfikująca reprezentacja nie powoduje, że sam zbiór danych jest niezmienny. Można modyfikować zbiór za pomocą zwykłego odniesienia (w naszym przypadku pięciolinii), jednakże metody modyfikujące elementy zbioru pozostają dostępne.
Jeśli uzyskujesz dostęp do zestawu danych z wielu wątków, musisz uważać, aby nie uszkodzić informacji w zestawie. Stanie się tak nieuchronnie, jeśli na przykład jeden wątek będzie próbował umieścić element w tablicy mieszającej, a inny wątek będzie próbował go zregenerować.
Zamiast implementować bezpieczne wątkowo klasy zbiorów danych, twórcy biblioteki zdecydowali się użyć w tym celu silnika widoków. Na przykład statyczna metoda synchronizedMap() klasy Collections może przekształcić dowolną mapę w Mapę za pomocą zsynchronizowanych metod dostępu.
HashMapa
Możesz teraz uzyskać dostęp do obiektu mapy z różnych wątków. Metody takie jak get() i put() są serializowane: każda metoda musi zakończyć swoje działanie, zanim inny wątek będzie mógł wywołać tę samą metodę.
Podczas tworzenia programu należy upewnić się, że żaden wątek nie uzyskuje dostępu do struktury danych przy użyciu normalnych, zdesynchronizowanych metod. Najprostszym sposobem zapewnienia tego jest nie przechowywanie żadnych odniesień do obiektu bazowego.
Tradycyjna klasa Hashtable służy temu samemu celowi co HashMap i ma zasadniczo ten sam interfejs. Podobnie jak metody klasy Vector, metody klasy Hashtable są synchronizowane. Jeżeli nie potrzebujesz zapewniać synchronizacji czy zgodności z kodem poprzednich wersji platformy Java, warto skorzystać z klasy HashMap. Klasa Dictionary jest abstrakcyjną klasą nadrzędną Hashtable.
Darmowe programy Java Maps na Twój telefon komórkowy. Pobierz bezpłatnie aplikacje Mapy na swój telefon z Javą. Najlepsze programy Mapy w Javie.
ICQ Mobile - darmowa wersja mobilnego ICQ. Rozmawiaj ze znajomymi, gdziekolwiek jesteś. Możesz łatwo dodać listę swoich kontaktów do ICQ bezpośrednio z VKontakte i innych sieci społecznościowych. Po co mieć wielu klientów, skoro można skorzystać z jednego uniwersalnego? Korzystaj z ICQ Mobile for Java i ciesz się wygodą i prostotą. ICQ Mobile for Java obsługuje protokół Mail.Ru Agent, możesz komunikować się ze znajomymi za pomocą Mail.Ru Agent i otrzymywać powiadomienia o nowych listach przychodzących do Twojej skrzynki pocztowej na Mail.Ru. Skorzystaj z map Mail.Ru, aby znaleźć adres lub wybrać żądaną trasę, biorąc pod uwagę korki.
pobierz ICQ / ICQ Mobile >>Mobile Yandex Maps to usługa Yandex, która umożliwia poruszanie się po mieście za pomocą urządzenia mobilnego. Poruszaj się po mieście i unikaj korków za pomocą telefonu komórkowego. Yandex.Maps to mapy ponad 250 miast w Twojej kieszeni. Znajdź najszybszą trasę dzięki automatycznie wygenerowanym trasom (Rosja i Ukraina). Monitoruj, co dzieje się na drodze - wiesz, gdzie na Twojej drodze znajduje się korek, wypadek lub blokada.
pobierz Mapy Yandex >>Mobilna mapa Moskwy z mapą metra „jMap” – dziś wyjątkowa aplikacja – nie pozwoli Ci zgubić się w wielkim mieście. Aplikacja jest bardzo przydatna nie tylko dla gości miasta, ale także lokalnych mieszkańców. Aplikacja zawiera wszystkie ulice i mapę metra powiązaną z mapą. W nowej wersji pojawiły się domy i obiekty: kina, teatry, muzea, atrakcje, parki, place, dworce, centra handlowe itp. Ułatwia to znacznie poruszanie się po okolicy za pomocą mapy mobilnej. Teraz z łatwością znajdziesz potrzebny Ci dom lub najbliższe kino. Nazwy ulic i stacji metra można wyświetlić, przesuwając wskaźnik. Możesz także wybrać żądaną stację metra na mapie i przenieść się do niej na mapie. Ponadto program pozwala szybko znaleźć ulicę na mapie miasta po nazwie.
pobierz Mapa Moskwy + Metro 2008 / Mapa Moskwy 2008 >>Aplikacja zawiera wszystkie ulice i mapę metra powiązaną z planem miasta. Nowa wersja mobilnej mapy zawiera teraz domy i obiekty: kina, teatry, muzea, atrakcje, parki, place, dworce, centra handlowe itp. Szczególnie dobrze reprezentowane jest centrum miasta. Teraz z łatwością znajdziesz potrzebny Ci dom lub najbliższe kino. Nazwy ulic i stacji metra można wyświetlić, przesuwając wskaźnik. Aplikacja zawiera wygodną mapę metra. Możesz wybrać żądaną stację metra na mapie i przenieść się do niej na mapie miasta. Dzięki wygodnej funkcji wyszukiwania program pozwala szybko znaleźć żądaną ulicę na mapie Petersburga według nazwy.
Pobierać:
Yandex.Mapy- program do nawigacji GPS korzystający z usługi o tej samej nazwie firmy Yandex. Nie musisz się martwić, czy masz niezbędne mapy; Yandex.Maps załaduje je automatycznie dla żądanego obszaru. Program powiadomi Cię o korkach, miejscach wypadków, a także pomoże Ci znaleźć wiele instytucji i organizacji w Twojej okolicy.
Aby program działał musisz mieć podłączone połączenie GPRS!
Obszary żółte i czerwone pokazują korki i zatory, gdzie średnia prędkość pojazdów jest mniejsza niż 20 km/h. Tereny zielone to wolne obszary, po których samochody poruszają się ze średnią prędkością 30-40 km/h. Im więcej uczestników systemu, tym dokładniejsze przekazywane informacje. I każdy może zostawić swój ślad na mapie.
Usługa jest zbudowana w taki sposób, że informacji o korkach udzielają sami użytkownicy. Zainstaluj Yandex.Maps, włącz opcję „zgłaszaj korki” - i jesteś pełnoprawnym członkiem usługi. Współrzędne Twojego urządzenia co dwie minuty przesyłane są do serwera, gdzie są analizowane i na podstawie danych od wielu uczestników system buduje mapę drogową.
Yandex.Mapy— program do nawigacji GPS korzystający z usługi o tej samej nazwie firmy Yandex. Nie musisz się martwić, czy masz niezbędne mapy; Yandex.Maps załaduje je automatycznie dla żądanego obszaru. Program powiadomi Cię o korkach, miejscach wypadków, a także pomoże Ci znaleźć wiele instytucji i organizacji w Twojej okolicy.
Aby program działał musisz mieć podłączone połączenie GPRS!
Główne cechy Yandex.Maps
Pokazuje Twoją lokalizację i kierunek ruchu (jeśli jest odbiornik GPS).
Budowa optymalnej trasy w Moskwie i regionie moskiewskim z uwzględnieniem korków.
Szczegółowe mapy ponad 130 miast w Rosji, Ukrainie i innych krajach, z ulicami i numerami domów.
Możliwość przeglądania zdjęć satelitarnych okolicy.
Dostarcza informacji o korkach.
Może określić Twoją przybliżoną pozycję za pomocą stacji telefonii komórkowej lub hotspotów Wi-Fi w Twojej okolicy.
Pokazuje miejsca instalacji kamer policji drogowej, roboty drogowe, wypadki i inne punkty przydatne dla kierowcy.
Korzystając z Yandex.Maps, możesz łatwo znaleźć kawiarnie, banki, hotele, kawiarnie, restauracje i wiele innych organizacji we właściwym miejscu.
Możliwe jest zapisanie trasy; zarejestrowany ślad można przesłać do usługi Yandex.Maps.
Razem z innymi użytkownikami możesz uczestniczyć w tworzeniu mapy ruchu, a także możesz zgłaszać miejsca wypadków i problemy na drodze, dodając znaczniki na mapie.
Dostępność „nocnego” trybu pracy na ciemną porę dnia.
Możliwość przejścia do trybu pełnoekranowego.
Pracuj offline, bez dostępu do sieci.
Yandex.Ruch
Obszary żółte i czerwone pokazują korki i zatory, gdzie średnia prędkość pojazdów jest mniejsza niż 20 km/h. Tereny zielone to wolne obszary, po których samochody poruszają się ze średnią prędkością 30-40 km/h. Im więcej uczestników systemu, tym dokładniejsze przekazywane informacje. I każdy może zostawić swój ślad na mapie.
Praca w przypadku braku dostępu do Internetu
Upewnij się, że aplikacja ma uprawnienia do odczytu i zapisu z dysku oraz że w ustawieniach włączone jest buforowanie map.
Pobierz archiwum z mapą żądanego regionu.
Znajdź folder /default w archiwum.
Przenieś zawartość folderu /default do folderu /yandexmaps/(KOD JĘZYKA) na urządzeniu mobilnym (na przykład /yandexmaps/ru-RU lub /yandexmaps/uk-UA, w zależności od języka określonego w ustawieniach języka).
Usługa jest zbudowana w taki sposób, że informacji o korkach udzielają sami użytkownicy. Zainstaluj Yandex.Maps, włącz opcję „zgłaszaj korki” - i jesteś pełnoprawnym członkiem usługi. Współrzędne Twojego urządzenia co dwie minuty przesyłane są do serwera, gdzie są analizowane i na podstawie danych od wielu uczestników system buduje mapę drogową.
Obszary żółte i czerwone pokazują korki i zatory, gdzie średnia prędkość pojazdów jest mniejsza niż 20 km/h. Tereny zielone to wolne obszary, po których samochody poruszają się ze średnią prędkością 30-40 km/h. Im więcej uczestników systemu, tym dokładniejsze przekazywane informacje. I każdy może zostawić swój ślad na mapie.