• Nie Znaleziono Wyników

Struktura danych – HashMap

N/A
N/A
Protected

Academic year: 2021

Share "Struktura danych – HashMap"

Copied!
1
0
0

Pełen tekst

(1)

Struktura danych – HashMap

Dodatek java.util

1) Interfejs Map public interface Map

Klasy implementujące: AbstractMap, HashMap, Hashtable, RenderingHints, WeakHashMap, Attributes

Interfejs odwzorowujący wartości kluczy do ich opisu bez możliwości powtarzania wartości kluczy i odwzorowania ich do tej samej wartości opisu.

Interfejs ten wprowadza kolekcję kluczy, kolekcje ich opisów oraz kolekcję odwzorowań.

Klasy implementujące nie zawsze gwarantują odpowiednie uporządkowanie kluczy np. HashMap.

Metody

void clear() Removes all mappings from this map (optional operation).

boolean containsKey(Object key) Returns true if this map contains a mapping for the specified key.

boolean containsValue(Object value) Returns true if this map maps one or more keys to the specified value.

Set entrySet() Returns a set view of the mappings contained in this map.

boolean equals(Object o) Compares the specified object with this map for equality.

Object get(Object key) Returns the value to which this map maps the specified key.

int hashCode() Returns the hash code value for this map.

boolean isEmpty() Returns true if this map contains no key-value mappings.

Set keySet() Returns a set view of the keys contained in this map.

Object put(Object key, Object value) Associates the specified value with the specified key in this map (optional operation).

void putAll(Map t) Copies all of the mappings from the specified map to this map (optional operation).

Object remove(Object key) Removes the mapping for this key from this map if present (optional operation).

int size() Returns the number of key-value mappings in this map.

Collection values() Returns a collection view of the values contained in this map.

java.util

2) Klasa public class HashMap – implementująca inerfejsy Cloneable, Map, Serializable I dziedzicząca od klasy AbstractMap

Klasa identyczna z klasą Hashtable, jednak w odróżnieniu od niej pozwala wprowadzać klucze równe null oraz zapewnia asynchroniczny dostęp do modyfikacji struktury mapy. Jeśli mapę obsługuje wiele wątków, powinna być zewnętrznie synchronizawana, aby uniemożliwić innym wątkom na jednoczesny dostęp do mapy ( jeden wątek modyfikuje, drugi mógłby bez synchronizacji czytać mapę).

Map m = Collections.synchronizedMap(new HashMap(...));

Konstruktory

HashMap() Konstruuje nową mapę z domyślnym rozmiarem i współczynnikiem ładowania równym 0,75. Jeśli iloczyn pojemności i współczynnika ładowania jest równy rozmiarowi danych umieszczonych w mapie, mapa powiększ swój rozmiar

HashMap(int initialCapacity) Konstruuje nową pustą mapę o zadanej wartości początkowej pojemności I z domyślnym współczynnikiem ładowania 0.75.

HashMap(int initialCapacity, float loadFactor) Konstruuje nową pustą mapę o zadanej wartości początkowej pojemności i z podanym współczynnikiem ładowania 0.75.

HashMap(Map t) Konstruuje nową mapę zawierającą dane odwzorowania innej mapy.

Metody

(2)

Object clone() Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned.

boolean containsKey(Object key) Returns true if this map contains a mapping for the specified key.

boolean containsValue(Object value) Returns true if this map maps one or more keys to the specified value.

Set entrySet() Returns a collection view of the mappings contained in this map.

Object get(Object key) Returns the value to which this map maps the specified key.

boolean isEmpty() Returns true if this map contains no key-value mappings. Set keySet() Returns a set view of the keys contained in this map.

Object put(Object key, Object value) Associates the specified value with the specified key in this map.

void putAll(Map t) Copies all of the mappings from the specified map to this one.

Object remove(Object key) Removes the mapping for this key from this map if present.

Int size() Returns the number of key-value mappings in this map.

Collection values() Returns a collection view of the values contained in this map.

Metody dziedziczone od klasy java.util.AbstractMap: equals, hashCode, toString

Metody dziedziczone od klasy java.lang.Object: finalize, getClass, notify, notifyAll, wait, wait, wait Metody dziedziczone od interfejsu java.util.Map equals, hashCode

Przykład zastosowania mapy HashMap

(3)

import java.util.*;

import java.io.*;

import java.lang.*;

import java.awt.event.*;

import javax.swing.table.*;

public class Aplikacja

{ HashMap dane=new HashMap(3,0.75F);

public void nadaj_tytul(String tytul_,String autor_,String ISBN_) { Tytul dana =new Tytul();

dana.nadaj_tytul(tytul_);

dana.nadaj_autor(autor_);

dana.nadaj_ISBN(ISBN_);

dane.put(tytul_, dana); //wstawienie do mapy klucza tytul_ oraz opisu klucza,

} // czyli obiektu ty[u Tytul

public HashMap podaj_dane()

{ HashMap pom=(HashMap)dane.clone();//wykonanie kopii mapy,

return pom; // bez kopiowania kluczy i ich opisu

}

void show() //wyświetlanie zawartości mapy za pomocą iteratora

{ Set klucze = dane.keySet(); // pobranie zbioru kluczy z mapy

Iterator iterator = klucze.iterator(); //utworzenie iteratora na zbiorze danych

while(iterator.hasNext()) //przejście przez zbiór za pomocą iteratora

{ String klucz=(String)iterator.next(); //pobieranie kolejnego klucza

Tytul t=(Tytul)dane.get(klucz); //pobieranie z mapy opisu wg podanego klucza

System.out.println(t.podaj_tytul()); //wyświetlanie opisu klucza, czyli danych

System.out.println(t.podaj_autor());//obiektu typu Tytul

System.out.println(t.podaj_ISBN());

} } }

(4)

import javax.swing.*;

import java.util.*;

import java.io.*;

import java.lang.*;

import java.awt.event.*;

import javax.swing.table.*;

public class Tytul

{ String tytul=new String();

String autor=new String();

String ISBN=new String();

public String podaj_tytul() {return tytul;}

public String podaj_autor() {return autor;}

public String podaj_ISBN() {return ISBN;}

public void nadaj_tytul(String a) {tytul=a;}

public void nadaj_autor(String b) {autor=b;}

public void nadaj_ISBN(String c) {ISBN=c;}

}

import java.sql.*;

import javax.swing.*;

import java.util.*;

import java.io.*;

import java.lang.*;

import java.awt.event.*;

import javax.swing.table.*;

import javax.swing.ListSelectionModel;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

public class Ttytul extends JFrame

implements ListSelectionListener,ActionListener {

DefaultTableModel model;

(5)

public Ttytul(Aplikacja ap) { super("Tytul 1");

dane=ap;

stan=0;

setSize(350,150);

JPanel panel=new JPanel();

JLabel etykieta_tytulow = new JLabel("Tytuly");

panel.add(etykieta_tytulow);

model = new DefaultTableModel(0,4);

Vector v=new Vector(4);

model.addRow(v);

tytuly = new JTable(model);

JScrollPane scrollpane = new JScrollPane(tytuly);

JTextField text=new JTextField();

tytuly.setCellEditor(new DefaultCellEditor(text));

tytuly.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );

ListSelectionModel rowSM = tytuly.getSelectionModel();

rowSM.addListSelectionListener(this);

panel.add(tytuly);

tytulOK=new JButton("Tytul OK");

tytulOK.addActionListener(this);

panel.add( tytulOK);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setContentPane(panel);

}

(6)

public void valueChanged(ListSelectionEvent e)

{ if (e.getValueIsAdjusting()) return; // ignorowanie dodatkowych zdarzeń

ListSelectionModel lsm = (ListSelectionModel)e.getSource();

if (lsm.isSelectionEmpty()) { /* nie wybrano wiersza w tabeli */ } else

{ wiersz = lsm.getMinSelectionIndex();

stan=1; } }

public void actionPerformed(ActionEvent evt) { Object zrodlo=evt.getSource();

if (zrodlo==tytulOK && stan==1)

{ String tytul_=(String)model.getValueAt(wiersz, 0);

String autor_=(String)model.getValueAt(wiersz, 1);

String ISBN_=(String)model.getValueAt(wiersz, 2);

dane.nadaj_tytul(tytul_,autor_,ISBN_);

stan=0;

wyswietl();

repaint();

(7)
(8)

public void wyswietl()

{ HashMap h=dane.podaj_dane(); //pobranie kopii mapy z obiektu typu Aplikacja

Set klucze=h.keySet(); //pobranie zbioru kluczy

Iterator iterator = klucze.iterator(); //utworzenie iteratora nad zbiorem kluczy

model = new DefaultTableModel(0,4);

tytuly.setModel(model);

int i=0;

while(iterator.hasNext()) //przejście przez zbiór kluczy za pomocą teratora

{ String klucz=(String)iterator.next(); //pobranie kolejnego klucza

Tytul t=(Tytul)h.get(klucz);//pobranie z mapy kolejnego opisu wg podanego klucza

int j=h.hashCode();//pobranie aktualnego kodu haszującego będącego sumą

String s=""+j; //wszystkich zakodowanych kluczy i przekształcenie do łańcucha

Vector vv=new Vector(4);

model.addRow(vv);

model.setValueAt(t.podaj_tytul(),i,0);

model.setValueAt(t.podaj_autor(),i,1);

model.setValueAt(t.podaj_ISBN(),i,2);

model.setValueAt(s,i,3);

i++;

} Vector vv=new Vector(4);

model.addRow(vv); }

public static void main(String[] arg) { Aplikacja aplikacja=new Aplikacja() ; Ttytul pr= new Ttytul(aplikacja);

pr.show();

} }

Cytaty