4
1 Collections Összetett adatstruktúrák 2009. 10. 10. Collections framework „Elıregyártott” interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Idıt, energiát takaríthatunk meg Tesztelt, minıségi és teljesítmény centrikus implementációk Nem kell különbözı adatszerkezet API-kat megtanulni Támogatja a kód újrafelhasználást Package: java.util 2009. 10. 10. Mibıl áll a keretrendszer Collection Interface-ek – Az alap adatszerkezet típusokat definiálják. Ez alkotja a keretrendszer alapját. Általános implementációk – A Collection interface-ek elsıdleges implementációi (osztályok). „Legacy” implementációk – Korábbi Java verziók adatszerkezet osztályai (Vector and Hashtable) a kompatibilitás miatt. „Wrapper” implementációk – Plusz funkciók (pl. szinkronizáció, módosíthatatlanság) megvalósítása. Absztrakt implementációk – részleges implementációk, melyek lehetıvé teszik speciális adatszerkezetek kialakítását. Algoritmusok – Statikus metódusok alapalgoritmusok megvalósítására, pl. rendezés. 2009. 10. 10. Az alap interface osztályok Collection İs interface: objektumok csoportját reprezentálja Lehet rendezett vagy rendezetlen csoport Lehet ismétlıdéses vagy nem ismétlıdı Nincs közvetlen implementációja A Collection leszármaztatott interface osztályai List – rendezett, elemek szekvenciája Set – a matematikai halmaz modellje SortedSet - 2009. 10. 10. Az alap interface osztályok Map – kulcs-érték párok tárolására szolgál. Azonos kulcs nem megengedett. SortedMap – mint a Map de az értékeket növekvı kulcs szerint rendezve tárolja (pl. szótár) 2009. 10. 10. Fontosabb Collection metódusok boolean add(Object o) boolean addAll( Collection c) void clear() boolean contains(Object o) boolean containsAll( Collection c) boolean isEmpty() Iterator iterator() boolean remove)Object o) boolean removeAll(Collection c) boolean retainAll(Collection c) int size() Object[] toArray() Object[] toArray( Object[] a)

Collections

Embed Size (px)

DESCRIPTION

qweqwe

Citation preview

Page 1: Collections

1

Collections

Összetett adatstruktúrák

2009. 10. 10.

Collections framework

� „Elıregyártott” interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására

� Legtöbbször módosítás nélkül használhatók� Idıt, energiát takaríthatunk meg

� Tesztelt, minıségi és teljesítmény centrikus implementációk

� Nem kell különbözı adatszerkezet API-kat megtanulni

� Támogatja a kód újrafelhasználást

� Package: java.util

2009. 10. 10.

Mibıl áll a keretrendszer

� Collection Interface-ek – Az alap adatszerkezet típusokat definiálják. Ez alkotja a keretrendszer alapját.

� Általános implementációk – A Collection interface-ek elsıdleges implementációi (osztályok).

� „Legacy” implementációk – Korábbi Java verziók adatszerkezet osztályai (Vector and Hashtable) a kompatibilitás miatt.

� „Wrapper” implementációk – Plusz funkciók (pl. szinkronizáció, módosíthatatlanság) megvalósítása.

� Absztrakt implementációk – részleges implementációk, melyek lehetıvé teszik speciális adatszerkezetek kialakítását.

� Algoritmusok – Statikus metódusok alapalgoritmusok megvalósítására, pl. rendezés.

2009. 10. 10.

Az alap interface osztályok

� Collection

� İs interface: objektumok csoportját reprezentálja

� Lehet rendezett vagy rendezetlen csoport

� Lehet ismétlıdéses vagy nem ismétlıdı

� Nincs közvetlen implementációja� A Collection leszármaztatott

interface osztályai � List – rendezett, elemek

szekvenciája� Set – a matematikai halmaz

modellje� SortedSet -

2009. 10. 10.

Az alap interface osztályok

� Map – kulcs-érték párok tárolására szolgál. Azonos kulcs nem megengedett.

� SortedMap – mint a Map de az értékeket növekvı kulcs szerint rendezve tárolja (pl. szótár)

2009. 10. 10.

Fontosabb Collection metódusok

� boolean add(Object o)

� boolean addAll(

Collection c)

� void clear()

� boolean

contains(Object o)

� boolean containsAll(

Collection c)

� boolean isEmpty()

� Iterator iterator()

� boolean remove)Object o)

� boolean

removeAll(Collection c)

� boolean

retainAll(Collection c)

� int size()

� Object[] toArray()

� Object[] toArray(

Object[] a)

Page 2: Collections

2

2009. 10. 10.

Collection interfacepublic interface Collection {

// Basic Operations

int size();

boolean isEmpty();

boolean contains(Object element);

boolean add(Object element); // Optional

boolean remove(Object element); // Optional

Iterator iterator();

// Bulk Operations

boolean containsAll(Collection c);

boolean addAll(Collection c); // Optional

boolean removeAll(Collection c); // Optional

boolean retainAll(Collection c); // Optional

void clear(); // Optional

// Array Operations

Object[] toArray();

Object[] toArray(Object a[]);

}2009. 10. 10.

Módosítás

� A módosítás opcionális operátor� Nem mindegyik implementáció támogatja

� UnsupportedOperationException

2009. 10. 10.

A List interfacepublic interface List extends Collection {

// Positional Access

Object get(int index);

Object set(int index, Object element); // Optional

void add(int index, Object element); // Optional

Object remove(int index); // Optional

abstract boolean addAll(int index, Collection c); // Optional

// Search

int indexOf(Object o);

int lastIndexOf(Object o);

// Iteration

ListIterator listIterator();

ListIterator listIterator(int index);

// Range-view

List subList(int from, int to);

} 2009. 10. 10.

A Set interfacepublic interface Set {

// Basic Operations

int size();

boolean isEmpty();

boolean contains(Object element);

boolean add(Object element); // Optional

boolean remove(Object element); // Optional

Iterator iterator();

// Bulk Operations

boolean containsAll(Collection c);

boolean addAll(Collection c); // Optional

boolean removeAll(Collection c); // Optional

boolean retainAll(Collection c); // Optional

void clear(); // Optional

// Array Operations

Object[] toArray();

Object[] toArray(Object a[]);

}

2009. 10. 10.

A Map interfacepublic interface Map {

// Basic Operations

Object put(Object key, Object value);

Object get(Object key);

Object remove(Object key);

boolean containsKey(Object key);

boolean containsValue(Object value);

int size();

boolean isEmpty();

// Bulk Operations

void putAll(Map t);

void clear();

// Collection Views

public Set keySet();

public Collection values();

public Set entrySet();

// Interface for entrySet elements

public interface Entry {

Object getKey();

Object getValue();

Object setValue(Object value);

}

} 2009. 10. 10.

Alap implementációs osztályok

� List� ArrayList – általános célú� LinkedList – bizonyos esetekben gyorsabb

� Set� HashSet – gyors, nincs sorrend� TreeSet – sorrend van

� Map� HashMap - gyors, nincs sorrend� TreeMap – sorrend van

Page 3: Collections

3

2009. 10. 10.

Iterator

� public boolean hasNext() � public Object next()

� Returns:� the next element in the iteration.

� Throws:� NoSuchElementException - iteration has no more

elements.

� public void remove()

2009. 10. 10.

Collection Algoritmusok

� A Collections (!) osztály statikus metódusai� Legtöbbjük a List adatszerkezeten mőködik

� Rendezés – sort� Keverés – shuffle� Adat manipuláció – reverse, fill, copy� Keresés - binarySearch

� Extrémumok keresése – min, max

2009. 10. 10.

Rendezési példa

import java.util.*;

public class Sort {

public static void main(String args[])

{

List l = Arrays.asList(args);

Collections.sort(l);

System.out.println(l);

}

}

2009. 10. 10.

Sort

� Két formája van� sort(List list) – normál sorrend� sort(List list, Comparator c) – komparátor által

meghatározott sorrend

� Comparator interface� int compare(Object a, Object b)� Returns: neg, 0, pos

2009. 10. 10.

Változások az 1.5 verziótól kezdve

� Új interfészek és osztályok� Queue� Vector

2009. 10. 10.

Cast problémák

List myIntList = new LinkedList(); // 1

myIntList.add(new Integer(0)); // 2

Integer x = (Integer)

myIntList.iterator().next(); // 3

� OrString[] s =

(String[])myTextList.toArray();

� Nincs fordításkor ellenırzés!

Page 4: Collections

4

2009. 10. 10.

Generics� Hasonló a C++ template-hez� Paraméterezhetı osztályokat és metódusokat eredményez

� Általánosabb kód� Fordítás közbeni ellenırzés lehetséges

� Collection<E>

� The most commonly used type parameter names are: � E - Element (used extensively by the Java Collections Framework) � K - Key � N - Number � T - Type � V - Value � S,U,V etc. - 2nd, 3rd, 4th types

2009. 10. 10.

Példa/** * Generic version of the Box class. */ public class Box<T> {

private T t; // T stands for "Type" public void add(T t) {

this.t = t; } public T get() {

return t; }

}…Box<Integer> integerBox; …integerBox = new Box<Integer>();

2009. 10. 10.

Új Collection interface

public interface Collection<E> extends Iterable<E> { // Basic operations int size(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean retainAll(Collection<?> c); //optional // Array operations Object[] toArray(); <T> T[] toArray(T[] a);

}

2009. 10. 10.

Módosított interfészek

public interface List<E> {

void add(E x);

Iterator<E> iterator();

}

public interface Iterator<E> {

E next();

boolean hasNext();

}

2009. 10. 10.

List<Integer> myIntList = new

LinkedList<Integer>(); // 1’

myIntList.add(new Integer(0)); //2’

Integer x = myIntList.iterator().next();

// 3’