SlideShare a Scribd company logo
1 of 33
Download to read offline
Lists
Arrays reloaded
Problem
A.A. 2012/2013Tecniche di programmazione2
Store a set of unique words (duplicates shall be ignored)
Class “interface”
public class WordSet {
public Boolean add(String str);
public void delete(String str);
public void dump();
}
Solution 1 (Array)
A.A. 2012/2013Tecniche di programmazione3
Array of String
Check whether a word is already present in the array
before inserting it
Shift the array after deleting an element
Data and constructor
A.A. 2012/2013Tecniche di programmazione4
final static int A_BIG_NUMBER = 9999;
String[] words;
int numWords;
public WordSet() {
numWords = 0;
words = new String[A_BIG_NUMBER];
}
dump() method
A.A. 2012/2013Tecniche di programmazione5
public void dump() {
System.out.println("WORDS");
for(int t=0; t<numWords; ++t) {
System.out.printf("%d) %sn", t+1, words[t]);
}
}
add() method
A.A. 2012/2013Tecniche di programmazione6
public Boolean add(String str) {
Boolean newWord = true;
for(int t=0; t<numWords; ++t) {
if(str.equals(words[t])) {
newWord = false;
}
}
if(newWord) {
words[numWords++] = str;
}
return newWord;
}
remove() method
A.A. 2012/2013Tecniche di programmazione7
public void remove(String str) {
int t;
t=0;
while(!str.equals(words[t]))
++t;
for(++t; t<numWords; ++t) {
words[t-1] = words[t];
}
--numWords;
}
remove() method
A.A. 2012/2013Tecniche di programmazione8
public void remove(String str) {
int t;
t=0;
while(!str.equals(words[t]))
++t;
for(++t; t<numWords; ++t) {
words[t-1] = words[t];
}
--numWords;
}
Collection Family Tree
A.A. 2012/2013Tecniche di programmazione9
Lists == Arrays “Reloaded”
A.A. 2012/2013Tecniche di programmazione10
Lists are (probably) the most widely used Java collections
Like arrays
full visibility and control over the ordering of its elements
may contain duplicates
Unlike arrays
resize smoothly
List interface
A.A. 2012/2013Tecniche di programmazione11
Add/remove elements
boolean add(element)
boolean remove(object)
Positional Access
element get(index)
element set(index, element)
void add(index, element)
element remove(index)
Search
boolean contains(object)
int indexOf(object)
remove() method
A.A. 2012/2013Tecniche di programmazione12
public void remove(String str) {
words.remove(str);
}
dump() method
A.A. 2012/2013Tecniche di programmazione13
public void dump() {
System.out.println("WORDS");
Iterator<String> i = words.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
}
add() method
A.A. 2012/2013Tecniche di programmazione14
public Boolean add(String str) {
if(!words.contains(str)) {
words.add(str);
return true;
} else {
return false;
}
}
Collection Family Tree
A.A. 2012/2013Tecniche di programmazione15
Data and constructor
A.A. 2012/2013Tecniche di programmazione16
ArrayList
LinkedList
List<String> words;
public WordSet() {
words = new ArrayList<String>();
}
List<String> words;
public WordSet() {
words = new LinkedList<String>();
}
ArrayList
A.A. 2012/2013Tecniche di programmazione17
Foo
Baz
Bar
ArrayList – Delete
A.A. 2012/2013Tecniche di programmazione18
Baz
Bar
Timing
A.A. 2012/2013Tecniche di programmazione19
Class System – current time
static long currentTimeMillis(); // in milliseconds
static long nanoTime(); // in nanoseconds
current value of the
most precise
available system
timer
Random string
A.A. 2012/2013Tecniche di programmazione20
Not quite random…
String val = “tag_” + num;
Universally unique identifier
A.A. 2012/2013Tecniche di programmazione21
Open Software Foundation (OSF) standard
Part of the Distributed Computing Environment (DCE)
Five versions
Version 4 (completely random)
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
x is any hexadecimal digit
y is one of 8, 9, a, or b.
E.g.,
f47ac10b-58cc-4372-a567-0e02b2c3d479
Random string
A.A. 2012/2013Tecniche di programmazione22
import java.util.UUID;
String val = UUID.randomUUID().toString());
Data and constructor
A.A. 2012/2013Tecniche di programmazione23
ArrayList
LinkedList
List<String> words;
public WordSet() {
words = new ArrayList<String>();
}
List<String> words;
public WordSet() {
words = new LinkedList<String>();
}
LinkedList
A.A. 2012/2013Tecniche di programmazione24
LinkedList – Delete
A.A. 2012/2013Tecniche di programmazione25
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione26
ArrayList LinkedList
add(element)
remove(object)
get(index)
set(index, element)
add(index, element)
remove(index)
contains(object)
indexOf(object)
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione27
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object)
get(index)
set(index, element)
add(index, element)
remove(index)
contains(object)
indexOf(object)
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione28
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object) SLUGGISH IMMEDIATE
get(index)
set(index, element)
add(index, element)
remove(index)
contains(object)
indexOf(object)
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione29
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object) SLUGGISH IMMEDIATE
get(index) IMMEDIATE SLUGGISH
set(index, element) IMMEDIATE SLUGGISH
add(index, element)
remove(index)
contains(object)
indexOf(object)
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione30
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object) SLUGGISH IMMEDIATE
get(index) IMMEDIATE SLUGGISH
set(index, element) IMMEDIATE SLUGGISH
add(index, element) SLUGGISH SLUGGISH
remove(index) SLUGGISH SLUGGISH
contains(object)
indexOf(object)
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione31
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object) SLUGGISH IMMEDIATE
get(index) IMMEDIATE SLUGGISH
set(index, element) IMMEDIATE SLUGGISH
add(index, element) SLUGGISH SLUGGISH
remove(index) SLUGGISH SLUGGISH
contains(object) SLUGGISH SLUGGISH
indexOf(object) SLUGGISH SLUGGISH
ArrayList vs. LinkedList
A.A. 2012/2013Tecniche di programmazione32
ArrayList LinkedList
add(element) IMMEDIATE IMMEDIATE
remove(object) SLUGGISH IMMEDIATE
get(index) IMMEDIATE SLUGGISH
set(index, element) IMMEDIATE SLUGGISH
add(index, element) SLUGGISH SLUGGISH
remove(index) SLUGGISH SLUGGISH
contains(object) SLUGGISH SLUGGISH
indexOf(object) SLUGGISH SLUGGISH
everybody lies
Licenza d’uso
A.A. 2012/2013Tecniche di programmazione33
Queste diapositive sono distribuite con licenza Creative Commons
“Attribuzione - Non commerciale - Condividi allo stesso modo (CC
BY-NC-SA)”
Sei libero:
di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico,
rappresentare, eseguire e recitare quest'opera
di modificare quest'opera
Alle seguenti condizioni:
Attribuzione — Devi attribuire la paternità dell'opera agli autori
originali e in modo tale da non suggerire che essi avallino te o il modo in
cui tu usi l'opera.
Non commerciale — Non puoi usare quest'opera per fini
commerciali.
Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se
la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una
licenza identica o equivalente a questa.
http://creativecommons.org/licenses/by-nc-sa/3.0/

More Related Content

Similar to Lists (Java Collections)

Similar to Lists (Java Collections) (8)

Java lezione2
Java lezione2Java lezione2
Java lezione2
 
Abstract Data Types
Abstract Data TypesAbstract Data Types
Abstract Data Types
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
 
R Vectors
R VectorsR Vectors
R Vectors
 
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Strutture dati 05-numpypandas
Strutture dati 05-numpypandasStrutture dati 05-numpypandas
Strutture dati 05-numpypandas
 

Recently uploaded

Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptcarlottagalassi
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 

Recently uploaded (7)

Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.ppt
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 

Lists (Java Collections)

  • 2. Problem A.A. 2012/2013Tecniche di programmazione2 Store a set of unique words (duplicates shall be ignored) Class “interface” public class WordSet { public Boolean add(String str); public void delete(String str); public void dump(); }
  • 3. Solution 1 (Array) A.A. 2012/2013Tecniche di programmazione3 Array of String Check whether a word is already present in the array before inserting it Shift the array after deleting an element
  • 4. Data and constructor A.A. 2012/2013Tecniche di programmazione4 final static int A_BIG_NUMBER = 9999; String[] words; int numWords; public WordSet() { numWords = 0; words = new String[A_BIG_NUMBER]; }
  • 5. dump() method A.A. 2012/2013Tecniche di programmazione5 public void dump() { System.out.println("WORDS"); for(int t=0; t<numWords; ++t) { System.out.printf("%d) %sn", t+1, words[t]); } }
  • 6. add() method A.A. 2012/2013Tecniche di programmazione6 public Boolean add(String str) { Boolean newWord = true; for(int t=0; t<numWords; ++t) { if(str.equals(words[t])) { newWord = false; } } if(newWord) { words[numWords++] = str; } return newWord; }
  • 7. remove() method A.A. 2012/2013Tecniche di programmazione7 public void remove(String str) { int t; t=0; while(!str.equals(words[t])) ++t; for(++t; t<numWords; ++t) { words[t-1] = words[t]; } --numWords; }
  • 8. remove() method A.A. 2012/2013Tecniche di programmazione8 public void remove(String str) { int t; t=0; while(!str.equals(words[t])) ++t; for(++t; t<numWords; ++t) { words[t-1] = words[t]; } --numWords; }
  • 9. Collection Family Tree A.A. 2012/2013Tecniche di programmazione9
  • 10. Lists == Arrays “Reloaded” A.A. 2012/2013Tecniche di programmazione10 Lists are (probably) the most widely used Java collections Like arrays full visibility and control over the ordering of its elements may contain duplicates Unlike arrays resize smoothly
  • 11. List interface A.A. 2012/2013Tecniche di programmazione11 Add/remove elements boolean add(element) boolean remove(object) Positional Access element get(index) element set(index, element) void add(index, element) element remove(index) Search boolean contains(object) int indexOf(object)
  • 12. remove() method A.A. 2012/2013Tecniche di programmazione12 public void remove(String str) { words.remove(str); }
  • 13. dump() method A.A. 2012/2013Tecniche di programmazione13 public void dump() { System.out.println("WORDS"); Iterator<String> i = words.iterator(); while(i.hasNext()) { System.out.println(i.next()); } }
  • 14. add() method A.A. 2012/2013Tecniche di programmazione14 public Boolean add(String str) { if(!words.contains(str)) { words.add(str); return true; } else { return false; } }
  • 15. Collection Family Tree A.A. 2012/2013Tecniche di programmazione15
  • 16. Data and constructor A.A. 2012/2013Tecniche di programmazione16 ArrayList LinkedList List<String> words; public WordSet() { words = new ArrayList<String>(); } List<String> words; public WordSet() { words = new LinkedList<String>(); }
  • 17. ArrayList A.A. 2012/2013Tecniche di programmazione17 Foo Baz Bar
  • 18. ArrayList – Delete A.A. 2012/2013Tecniche di programmazione18 Baz Bar
  • 19. Timing A.A. 2012/2013Tecniche di programmazione19 Class System – current time static long currentTimeMillis(); // in milliseconds static long nanoTime(); // in nanoseconds current value of the most precise available system timer
  • 20. Random string A.A. 2012/2013Tecniche di programmazione20 Not quite random… String val = “tag_” + num;
  • 21. Universally unique identifier A.A. 2012/2013Tecniche di programmazione21 Open Software Foundation (OSF) standard Part of the Distributed Computing Environment (DCE) Five versions Version 4 (completely random) xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx x is any hexadecimal digit y is one of 8, 9, a, or b. E.g., f47ac10b-58cc-4372-a567-0e02b2c3d479
  • 22. Random string A.A. 2012/2013Tecniche di programmazione22 import java.util.UUID; String val = UUID.randomUUID().toString());
  • 23. Data and constructor A.A. 2012/2013Tecniche di programmazione23 ArrayList LinkedList List<String> words; public WordSet() { words = new ArrayList<String>(); } List<String> words; public WordSet() { words = new LinkedList<String>(); }
  • 25. LinkedList – Delete A.A. 2012/2013Tecniche di programmazione25
  • 26. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione26 ArrayList LinkedList add(element) remove(object) get(index) set(index, element) add(index, element) remove(index) contains(object) indexOf(object)
  • 27. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione27 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) get(index) set(index, element) add(index, element) remove(index) contains(object) indexOf(object)
  • 28. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione28 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) SLUGGISH IMMEDIATE get(index) set(index, element) add(index, element) remove(index) contains(object) indexOf(object)
  • 29. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione29 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) SLUGGISH IMMEDIATE get(index) IMMEDIATE SLUGGISH set(index, element) IMMEDIATE SLUGGISH add(index, element) remove(index) contains(object) indexOf(object)
  • 30. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione30 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) SLUGGISH IMMEDIATE get(index) IMMEDIATE SLUGGISH set(index, element) IMMEDIATE SLUGGISH add(index, element) SLUGGISH SLUGGISH remove(index) SLUGGISH SLUGGISH contains(object) indexOf(object)
  • 31. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione31 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) SLUGGISH IMMEDIATE get(index) IMMEDIATE SLUGGISH set(index, element) IMMEDIATE SLUGGISH add(index, element) SLUGGISH SLUGGISH remove(index) SLUGGISH SLUGGISH contains(object) SLUGGISH SLUGGISH indexOf(object) SLUGGISH SLUGGISH
  • 32. ArrayList vs. LinkedList A.A. 2012/2013Tecniche di programmazione32 ArrayList LinkedList add(element) IMMEDIATE IMMEDIATE remove(object) SLUGGISH IMMEDIATE get(index) IMMEDIATE SLUGGISH set(index, element) IMMEDIATE SLUGGISH add(index, element) SLUGGISH SLUGGISH remove(index) SLUGGISH SLUGGISH contains(object) SLUGGISH SLUGGISH indexOf(object) SLUGGISH SLUGGISH everybody lies
  • 33. Licenza d’uso A.A. 2012/2013Tecniche di programmazione33 Queste diapositive sono distribuite con licenza Creative Commons “Attribuzione - Non commerciale - Condividi allo stesso modo (CC BY-NC-SA)” Sei libero: di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera di modificare quest'opera Alle seguenti condizioni: Attribuzione — Devi attribuire la paternità dell'opera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera. Non commerciale — Non puoi usare quest'opera per fini commerciali. Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa. http://creativecommons.org/licenses/by-nc-sa/3.0/