• Keine Ergebnisse gefunden

Datamining und Sequenzanalyse Collections

N/A
N/A
Protected

Academic year: 2022

Aktie "Datamining und Sequenzanalyse Collections"

Copied!
35
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Collections

Datamining und Sequenzanalyse

Kai Dührkop, Markus Fleischauer

(2)

Arrays

(3)

Arrays

Arrays erzeugen

int[] arr1 = new int[3]

int[] arr2 = {1,2,3}

Falls möglich primitive Datentypen verwenden int[] arr1 anstatt Integer[] arr1

java.util.Arrays

sort, fill, copyOf, binarySearch, toString

System.arraycopy

(4)

Generics

(5)

Ein Stack für Zahlen

public class IntegerStack { int[] stack;

int pos;

public IntegerStack(){

stack = new int[10];

pos = -1;

}

public int pop(){

if(pos<0) throw new RuntimeException("Stack is empty");

int backVal = stack[pos];

pos--;

return backVal;

}

public void push(int val){

if(pos<9){

pos++;

stack[pos] = val;

}else throw new RuntimeException("Stack is full");

} }

(6)

public class ObjectStack { Object[] stack;

int pos;

public ObjectStack(){

stack = new Object[10];

pos = -1;

}

public Object pop(){

if(pos<0) throw new RuntimeException("Stack is empty");

Object backVal = stack[pos];

pos--;

return backVal;

}

public void push(Object val){

if(pos<9){

pos++;

stack[pos] = val;

}else throw new RuntimeException("Stack is full");

}

Ein universeller Stack

(7)

Zufriedenstellend?

public static void main(String[] args){

ObjectStack stack = new ObjectStack();

stack.push(1);

stack.push(2);

stack.push("3");

stack.push(4);

Integer val4 = (Integer) stack.pop(); System.out.println("4: "+val4);

Integer val3 = (Integer) stack.pop(); System.out.println("3: "+val3);

Integer val2 = (Integer) stack.pop(); System.out.println("2: "+val2);

Integer val1 = (Integer) stack.pop(); System.out.println("1: "+val1);

}

4: 4Exception in thread "main" java.lang.ClassCastException:

java.lang.String cannot be cast to java.lang.Integer at ObjectStack.main(ObjectStack.java:35)

(8)

Generics

public class GenericStack <T> { Object[] stack;

int pos;

public GenericStack(){

stack = new Object[10];

pos = -1;

}

public T pop(){

if(pos<0) throw new RuntimeException("Stack is empty");

T backVal = (T) stack[pos];

pos--;

return backVal;

}

public void push(T val){

if(pos<9){

pos++;

stack[pos] = val;

}else throw new RuntimeException("Stack is full");

}

(9)

Generics

public static void main(String[] args){

GenericStack<Integer> genStack = new GenericStack<Integer>();

genStack.push(1);

genStack.push("2");

genStack.push(3);

genStack.push(4);

Integer val1 = genStack.pop(); System.out.println(val1);

Integer val2 = genStack.pop(); System.out.println(val2);

Integer val3 = genStack.pop(); System.out.println(val3);

Integer val4 = genStack.pop(); System.out.println(val4);

}

The method push(Integer) in the type GenericStack<Integer>

is not applicable for the arguments (String)

(10)

Generics

Typeinschränkungen

class NumberList <T extends Number>{

public int doSomething(T number){ return number.intValue(); } }

Der Diamantoperator

GenericStack<String> stack = new GenericStack<>();

(11)

Generics

Generische Schnittstellen

public class Class1 implements Comparable<Class1> { public int compareTo( Class1 o ) { ... };

}

Generische Methoden

public class Tools {

public static <T extends Number > int intVal ( T val ) { return number.intValue();

} }

(12)

Collections API

(13)

Struktur der Collections API

Collection

List Set Queue

AbstractList

SortedSet

AbstractCollection BlockingQueue

AbstractQueue AbstractSet

AbstractSequential List

Deque

(14)

Was kann eine Collection?

add / addAll

contains / containsAll

remove / removeAll

size

toArray

isEmpty

clear

(15)

Listen

List

AbstractList AbstractCollection

AbstractSequential

List ArrayList

LinkedList

Deque

(16)

Listen

Erweiterungen zu Collection

add (mit Index)

get

indexOf / lastIndexOf

remove (mit Index)

set

subList

Vertreter

ArrayList: basiert auf Array; (in der Regel schneller)

LinkedList: basiert auf verkettete Liste

(17)

Welche Liste soll ich verwenden?

schneller „random access“, Lösch- und Einfügeoperationen fast nur am Ende?

ArrayList

schneller sequentieller Zugriff, Lösch- und Einfügeoperationen in der Mitte, viele

Zugriffe am Anfang/Ende?

LinkedList

(18)

Queue

BlockingQueue

Queue AbstractCollection

AbstractQueue Deque

Methoden

offer peek poll

Vertreter

ConcurrentLinkedQueue: Thread-sicher; verkettete Liste

add element remove

Einfügen Entnehmen Löschen mit Exception

Rückgabewert

(19)

Vertreter

put,take → blockiert bis ein Element verfügbar ist

poll, peek, offer mit Timeout

BlockingQueue

Erweiterungen

DelayQueue: Eingefügte Elemente erst nach einer Zeit verfügbar

ArrayBlockingQueue: max. Kapazität; Array

LinkedBlockingQueue: ohne max. Kapazität; verkettete Liste

PriorityBlockingQueue: liefert das kleinste Element

(20)

Deque

Methoden von Deque

Mit Exception Ohne Exception

Einfügen addFirst / addLast offerFirst / offerLast

Löschen removeFirst / removeLast pollFirst / pollLast

Entnehmen getFirst / getLast peekFirst / peekLast

(21)

Deque als Stack

Methode Stack Methode Deque

push addFirst

pop removeFirst

peek peekFirst

Deque

Vertreter

ArrayDeque: basiert auf einem Array

LinkedList: ...

LinkedBlockingDeque: gleichzeitig BlockingQueue

(22)

Sets - Mengen

Set

SortedSet AbstractCollection

AbstractSet

HashSet Linked TreeSet

HashSet

(23)

Sets

Vorhandene Sets

HashSet: basiert auf Hashtable; schnell; Iteration ohne ohne feste Reihenfolge

(contains, add, remove in O(1))

LinkedHashSet: Hashtabelle + verkettete Liste; Iteration in Einfügereihenfolge

(contains, add, remove in O(1) → mehr Overhead)

TreeSet: sortiert; Iteration mit fester Reihenfolge;

rot-schwarz Baum

(contains, add, remove in O(log(n)))

(24)

Zusätzliche Methoden von TreeSet

first

headSet

comparator

ceiling

higher

last

subSet

tailSet

floor

lower

TreeSet

(25)

Erzeugen von TreeSets – Comparator

public class MyClass1 { private int val;

public MyClass1(int val) {this.val = val;}

public int getVal() { return val; } public boolean equals(Object o) { … } }

TreeSet<MyClass1> tree = new TreeSet<>(new Comparator<MyClass1>() {

@Override

public int compare(MyClass1 o1, MyClass1 o2) { return o1.getVal() - o2.getVal();

}

});

(26)

Erzeugen von TreeSets – Comparable

public class MyClass2 implements Comparable<MyClass2> { private int val;

public MyClass2(int val) {this.val = val;}

public int getVal() { return val; } public boolean equals(Object o) { … }

@Override

public int compareTo(MyClass2 o) {

return this.getVal() - o.getVal();

} }

TreeSet<MyClass2> tree = new TreeSet<MyClass2>();

(27)

Sets und equals

equals und TreeSets

equals und HashSet / LinkedHashSet

equals = true compare = 0 bzw. compareTo = 0

equals = true object1.hashCode() == object2.hashCode()

&

object1.equals(object2)

(28)

Maps – assoziativer Speicher

Map<K,V>

AbstractMap<K,V> NavigableMap<K,V>

HashMap<K,V>

TreeMap<K,V>

Linked

HashMap<K,V>

SortedMap<K,V>

(29)

Maps

Methoden von Map<K,V>

put(K,V)

get(K)

containsKey(K)

containsValue(V)

remove(K)

clear

isEmpty

size

keySet / values

(30)

Maps

Vorhandene Maps

HashMap: schnelle Hash-Tabelle → Schlüssel ohne Reihenfolge ACHTUNG: Zusammenhang equals und hashCode

LinkedHashMap: Hash-Tabelle + verkettete Liste → Schlüssel in Einfügereihenfolge

ACHTUNG: Zusammenhang equals und hashCode

TreeMap: Rot-Schwarz Baum → Schlüssel sind sortiert

(31)

Maps

Zusätzliche Methoden von TreeMap(K,V)

comparator

firstKey()

lastKey()

ceilingKey(K)

higherKey(K)

headMap(K)

tailMap(K)

subMap(K,K)

floorKey(K)

lowerKey(K)

(32)

Welche Map/Set soll ich nehmen?

Reihenfolge

notwendig? Sortierung

notwendig?

HashMap HashSet

TreeMap TreeSet

LinkedHashMap LinkedHashSet Start

nein nein

ja ja

(33)

java.util.Collections

Synchronisierte Datenstrukturen

syncronizedMap / syncronizedSet / syncronizedList / syncronizedCollection

Read Only Datenstrukturen

unmodifiableMap / unmodifiableSet /

unmodifiableList / unmodifiableCollection

Singletons (nur ein Element, unveränderbar)

singletonMap / singletonList / singleton

Dummys (leer, unveränderbar)

emptyMap / emptyList / emptySet

(34)

java.util.Collections

Listenoperationen

binarySearch

replaceAll

reverse

rotate

swap

copy

shuffle

fill

Operationen für Collections

disjoint

frequency

min / max

(35)

Klassen die man meiden sollte

● Vector

● Stack

● HashTable

Referenzen

ÄHNLICHE DOKUMENTE

RPUSH listenname Wert hinten anh¨ angen LPUSH listenname Wert vorne anh¨ angen LLEN listenname Anzahl der Elemente LRANGE listenname 0 -1 alle Elemente. RPOP listenname letztes

denen die Wahl oder Anstellung zusteht, ertheilt wird sie von denjenigen,

Das Neujahrskon- zert in Zusammenarbeit mit der Stadt Königstein und gefördert von der Taunus Sparkasse, ist seit einigen Jahren ein Publi- kumsmagnet nicht nur für

commit: 24b9da commit: 31fa5a commit: 8b5cx3 commit: d3aff1 commit: aa85fg.

● Jede Datei und jedes Verzeichnis ist einem Eigentümer und einer Gruppe zugeordnet. ● verschiedene Rechte für Eigentümer, Gruppe

für den Halbmesser 100 berechneten Längen der Tangenten beziehungsweise Cotangenten als Behelf für die Konstruktion der Winkel von 0° bis 360°...

Für dieses Jahr wünsche ich uns allen Gesundheit, gute Geschäfte und bald wieder viele sorgenfreie Kontakte mit Freunden und der Familie.. Für DIE PTA IN DER APOTHEKE wird es

Aus „sozialer“ wird „emo- tionale“ Intelligenz Damals stellten Edward Lee Thorn- dike und David Wechsler, zwei US-amerikanische Psycholo- gen, eine These auf: Selbst der