Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Kolekcje

No description
by

Malgorzata Mrowka

on 4 August 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Kolekcje

Kolekcje
ArrayList
Dynamically resizing array: (oldCapacity * 3)/2 + 1
od Java 7: (oldCapacity * 3)

Domyślny rozmiar 10!!

System.arrayCopy();

Szybki dostęp do elementów; TAK! dla get()

add(int, E) złożoność: O(n), przesunięcie w prawo

remove(int),remove(Object) złożoność: O(n), przesunięcie w lewo.

Collections.reverse()

list.subList(from, to).clear()

duplikaty

zachowany porządek dodawania na listę

Iterator, ListIterator

akceptuje null
List
HashSet
nie ma gwarancji kolejności

najbardziej wydajny Set



implementacja to
HashMap z pustym
values


TreeSet
naturalny porządek elementów

obiekty muszą implementować Comparable, albo Comparator w konstruktorze



implementuje NavigableSet, SortedSet

LinkedHashSet


zachowuje porządek elementów




Jak działa Hash table?
TAK! Dla remove() i add()

wskaźnik do poprzedniego i następnego elementu

znalezienie konketnego elementu zależy od ilosci elementów na liście

brak System.arrayCopy
LinkedList
Queue
head to element o najniższym prio

obiekty na PriorityQueue muszą implementować Comparable

PriorityQueue vs. TreeSet: PriorityQueue szybsza ale dostęp tylko do head!
FIFO
Deque
FIFO lub LIFO


ArrayDeque
dostępna od Java 6

resizable-array

szybsza niż Stack i LinkedList
HashMap
Dodawanie elementu:
key.hashCode() użyty do funkcji hashującej

kolizja: LinkedList jest użyta jako bucket

rehashing
TreeMap
implementacja drzewa binarnego Red-Black

naturalny porządek elementów

obiekty muszą implementować Comparable, albo Comparator w konstruktorze


LinkedList i ArrayDeque
Problemy z performance?
Jak zapewnić dostęp read-only do kolekcji?
Jak sprawdzić czy 2 kolekcje maja wspólne elementy?
Collections.unmodifiableCollection
Collections.disjoint
Jak policzyć ile razy obiekt wystąpił w kolekcji?
Collections.frequency
Trove
CopyOnWriteArrayList :
działa na kopii oryginalnej listy; update
przez list.iterator();

szybki odczyt, wolny zapis

UnsupportedOperationException
Blok synchronized

Collections.synchronizedlist
Synchronizacja
Fail-Fast vs Fail-Safe Iterator
Vector
HashSet
LinkedHashSet
TreeSet
Synchronizacja
CopyOnWriteArraySet
Collections.synchronizedSet(Set set)
ConcurrentSkipListSet:
Java 6 O(log n )
ASC szybsze niż DESC lock free
Collections.newSetFromMap(new ConcurrentHashMap())
odpowiednik HashMap
putIfAbsent() - atomowe dodawanie do listy

LinkedHashMap
zachowuje porządek
Zmiana porządku sortowania:
Java 5
Collections.reverseOrder()
Java 6
descendingMap()
headMap, tailMap, subMap
lista dwukierunkowa LinkedHashMap.Entry rozszerza HashMap.Entry dodając pola previous i next

więcej pamięci ze względu na prev i next
Synchronizacja
blok synchronized


Collections.synchronizedMap()
Hashtable
ConcurrentHashMap
ConcurrentHashMap
blokowanie segmentu mapy

concurrency level
default: 16

jednoczesny odczyt przez wiele wątków (16)

brak synchronizacji dla put, remove, putAll, clear

putIfAbsent()

Używać gdy dużo wątków odczytu a mało zapisu
ConcurrentSkipListMap
Synchronizacja
ConcurrentLinkedQueue
Non - Blocking Queues
ConcurrentLinkedDeque
Blocking Queues
LinkedBlockingQueue
ArrayBlockingQueue
LinkedTransferQueue
PriorityBlockingQueue
LinkedBlockingDeque
SynchroniousQueue
realizacja Producer - Consumer
metody put(), take() czekają, aż będzie możliwe wykonanie


Fail - Fast Iterator
Iterator

przetrzymuje
modCount
Zmiana elementów => zmiana modCount
ConcurrentModificationException
Fail-Safe Iterator
Iteratory na klonach kolekcji
Na zasadzie Hashtable
PriorityQueue
Full transcript