Collections Let's Take a Quick Break Organizing Data We have many - - PowerPoint PPT Presentation

collections
SMART_READER_LITE
LIVE PREVIEW

Collections Let's Take a Quick Break Organizing Data We have many - - PowerPoint PPT Presentation

Collections Let's Take a Quick Break Organizing Data We have many ways of storing and organizing data in our programs: String s for holding sequences of characters. ArrayList s for holding sequences of general objects. Arrays for


slide-1
SLIDE 1

Collections

slide-2
SLIDE 2

Let's Take a Quick Break

slide-3
SLIDE 3

Organizing Data

  • We have many ways of storing and
  • rganizing data in our programs:
  • Strings for holding sequences of characters.
  • ArrayLists for holding sequences of general
  • bjects.
  • Arrays for holding fixed-sized sequences.
  • HashMaps for associating data with one another.
  • Are there other ways of organizing data?
  • What do they look like?
slide-4
SLIDE 4

The Collections Framework

  • Java has a variety of collections classes

for holding groups of data.

slide-5
SLIDE 5

The Collections Framework

  • Java has a variety of collections classes

for holding groups of data.

  • The three major ways of organizing data

are

  • Sets, which store unordered data
slide-6
SLIDE 6

The Collections Framework

  • Java has a variety of collections classes

for holding groups of data.

  • The three major ways of organizing data

are

  • Sets, which store unordered data,
  • Lists, which store sequences
slide-7
SLIDE 7

The Collections Framework

  • Java has a variety of collections classes

for holding groups of data.

  • The three major ways of organizing data

are

  • Sets, which store unordered data,
  • Lists, which store sequences, and
  • Maps, which store key/value pairs.
slide-8
SLIDE 8

The Collections Framework

Java has a variety of collections classes for holding groups of data. The three major ways of organizing data are

  • Sets, which store unordered data,

Lists, which store sequences, and Maps, which store key/value pairs.

slide-9
SLIDE 9

What is a Set?

  • A set is a collection of distinct elements.
  • Similar to an ArrayList, but elements are

not stored in a sequence.

  • Major operations are:
  • Adding an element.
  • Removing an element.
  • Checking whether an element exists.
  • Useful for answering questions of the

form “have I seen this before?”

slide-10
SLIDE 10

HashSet<String> mySet = new HashSet<String>();

slide-11
SLIDE 11

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); CS106A CS106A

To add a value to a

HashSet, use the syntax set.add(value)

slide-12
SLIDE 12

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); CS106A CS106A CS106A Ibex

slide-13
SLIDE 13

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); CS106A CS106A CS106A Ibex CS106A 137

slide-14
SLIDE 14

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A"); CS106A CS106A CS106A Ibex CS106A 137

If you add a value pair where the value exists, nothing happens.

slide-15
SLIDE 15

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A"); mySet.contains("Ibex"); CS106A CS106A CS106A Ibex CS106A 137

slide-16
SLIDE 16

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A"); mySet.contains("Ibex"); CS106A CS106A CS106A Ibex CS106A 137

To see if a value exists:

set.contains(value)

slide-17
SLIDE 17

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A"); mySet.contains("Ibex"); mySet.contains("CS106A"); CS106A CS106A CS106A Ibex CS106A 137

slide-18
SLIDE 18

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A") mySet.contains("Ibex"); mySet.contains("CS106A"); CS106A CS106A CS106A Ibex CS106A 137

slide-19
SLIDE 19

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A") mySet.contains("Ibex"); mySet.contains("CS106A"); mySet.contains("<(^_^)>"); CS106A CS106A CS106A Ibex CS106A 137

slide-20
SLIDE 20

HashSet<String> mySet = new HashSet<String>(); mySet.add("CS106A"); mySet.add("Ibex"); mySet.add("137"); mySet.add("CS106A") mySet.contains("Ibex"); mySet.contains("CS106A"); mySet.contains("<(^_^)>"); CS106A CS106A CS106A Ibex CS106A 137

slide-21
SLIDE 21

Basic Set Operations

  • To insert an element:

set.add(value)

  • To check whether a value exists:

set.contains(value)

  • To remove an element:

set.remove(value)

slide-22
SLIDE 22

Word Walks

CODE DESIRE REWRITE TEMPERATE TEATIME MEMENTO TORRENT

slide-23
SLIDE 23

Word Skips

CARROT TOMATO OKRA ASPARAGUS SQUASH HORSERADISH

slide-24
SLIDE 24

Word Skips

  • Begin with any word you'd like.
  • Choose a word whose first letter is the

same as the last letter of your current word.

  • Repeat until you get bored.
slide-25
SLIDE 25

Iterators

  • To visit every element of a collection, you can use the

“for each” loop: for (ElemType elem: collection) { … }

  • Alternatively, you can use an iterator, an object whose

job is to walk over the elements of a collection.

  • The iterator has two commands:
  • hasNext(), which returns whether there are any more

elements to visit, and

  • next(), which returns the next element and moves the

iterator to the next position.

slide-26
SLIDE 26

Java Iterators

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

slide-27
SLIDE 27

Java Iterators

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

slide-28
SLIDE 28

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

slide-29
SLIDE 29

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

slide-30
SLIDE 30

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-31
SLIDE 31

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-32
SLIDE 32

Java Iterators

137 42 2718

hasNext()?

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-33
SLIDE 33

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-34
SLIDE 34

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-35
SLIDE 35

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-36
SLIDE 36

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-37
SLIDE 37

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-38
SLIDE 38

Java Iterators

137 42 2718

hasNext()?

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-39
SLIDE 39

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-40
SLIDE 40

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-41
SLIDE 41

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-42
SLIDE 42

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-43
SLIDE 43

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-44
SLIDE 44

Java Iterators

137 42 2718

hasNext()?

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-45
SLIDE 45

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-46
SLIDE 46

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-47
SLIDE 47

Java Iterators

137 42 2718 next()!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-48
SLIDE 48

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter iter

slide-49
SLIDE 49

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter iter

slide-50
SLIDE 50

Java Iterators

137 42 2718

hasNext()?

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-51
SLIDE 51

Java Iterators

137 42 2718 Done!

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-52
SLIDE 52

Java Iterators

137 42 2718

ArrayList<Integer> myList = /* … */ Iterator<Integer> iter = myList.iterator(); while (iter.hasNext()) { Integer curr = iter.next(); /* … use curr … */ }

iter

slide-53
SLIDE 53

A Use Case for Iterators

  • Because all collections have iterators, a

method can return an iterator to indicate “here is some data to look at.”

  • Internally, that data can be stored in any

format.

  • Separates the implementation (how the

class works) from the interface (how the class is used).

slide-54
SLIDE 54

A Word of Warning

  • The following will loop forever on a nonempty collection:

while (collection.iterator().hasNext()) { /* … */ }

  • Every time that you call .iterator(), you get back a

new iterator to the start of the collection.

Ibex Kitty

slide-55
SLIDE 55

A Word of Warning

  • The following will loop forever on a nonempty collection:

while (collection.iterator().hasNext()) { /* … */ }

  • Every time that you call .iterator(), you get back a

new iterator to the start of the collection.

Ibex Kitty

slide-56
SLIDE 56

The Collections Framework

Collection Map List Set

ArrayList HashMap HashSet

slide-57
SLIDE 57

The Collections Framework

Collection Map List Set

ArrayList HashMap HashSet LinkedList TreeSet TreeMap

Plus a lot more!

slide-58
SLIDE 58

The Collections Framework

Collection Map List Set

ArrayList HashMap HashSet LinkedList TreeSet TreeMap

Plus a lot more!

slide-59
SLIDE 59

TreeSet

  • TreeSet is similar to HashSet, except

that the values in a TreeSet are stored in sorted order.

  • Iterating over a TreeSet guarantees that

the elements are visited in ascending

  • rder.
  • TreeSet is a bit slower than HashSet, so

it's best used only when you really need things in sorted order.

slide-60
SLIDE 60

Levels of Specificity

  • To create a map, set, or list, you must

choose a specific implementation (i.e. ArrayList, HashMap, etc.)

  • You can store maps, sets, or lists in

variables of type Map, Set, or List.

  • Similar to GObject versus GOval, GRect, etc.
  • Lets you say “I just need key/value pairs”

rather than “I need key/value pairs specifically stored as a HashMap”

slide-61
SLIDE 61

TreeMap

  • TreeMap is similar to HashMap, except that

the keys in a TreeMap are stored in sorted

  • rder.
  • Like TreeSet, iteration over the keys visits

the keys in sorted order.

  • The TreeMap has several impressive methods

that don't exist on the normal HashMap.

  • There is slight performance cost to using

TreeMap.

slide-62
SLIDE 62

Data With Stakes

slide-63
SLIDE 63

Just how bad was the 2008 financial meltdown?

slide-64
SLIDE 64

An Amazing Website

www.data.gov