Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 11: Java Collections Framework.

Slides:



Advertisements
Similar presentations
Introduction to Computation and Problem Solving Class 32: The Java® Collections Framework Prof. Steven R. Lerman and Dr. V. Judson Harward.
Advertisements

Lists and the Collection Interface Chapter 4. Chapter Objectives To become familiar with the List interface To understand how to write an array-based.
JAVA Programming (Session 7) When you are willing to make sacrifices for a great cause, you will never be alone. Instructor:
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
Data Structures A data structure is a collection of data organized in some fashion that permits access to individual elements stored in the structure This.
Collections Framework A very brief look at Java’s Collection Framework David Davenport May 2010.
Collections Sets - no duplicates Lists - duplicates allowed Maps - key / value pairs A collection is an Object which contains other Objects. There are.
CSci 143 Sets & Maps Adapted from Marty Stepp, University of Washington
15-Jun-15 Lists in Java Part of the Collections Framework.
24-Jun-15 Introduction to Collections. 2 Collections A collection is a structured group of objects Java 1.2 introduced the Collections Framework Collections.
© The McGraw-Hill Companies, 2006 Chapter 17 The Java Collections Framework.
Lists in Java Part of the Collections Framework. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection.
12-Jul-15 Lists in Java Part of the Collections Framework.
CSE 143 Lecture 15 Sets and Maps reading: ; 13.2 slides created by Marty Stepp
CSE 143 Lecture 7 Sets and Maps reading: ; 13.2 slides created by Marty Stepp
Java's Collection Framework
CSE 143 Lecture 15 Sets and Maps; Iterators reading: ; 13.2; 15.3; 16.5 slides adapted from Marty Stepp
SEG4110 – Advanced Software Design and Reengineering TOPIC G Java Collections Framework.
Sets and Maps Part of the Collections Framework. The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 22 Java Collections.
Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Chapter 22 Java Collections.
Java™ How to Program, 9/e Presented by: Dr. José M. Reyes Álamo © Copyright by Pearson Education, Inc. All Rights Reserved.
Collections in Java. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection with no duplicates SortedSet.
(c) University of Washington14-1 CSC 143 Java Collections.
CSE 143 Lecture 2 More ArrayList ; classes and objects reading: 10.1; slides created by Marty Stepp and Hélène Martin
CSE 143 Lecture 4 ArrayList Reading: 10.1 slides created by Marty Stepp
CSS446 Spring 2014 Nan Wang.  Java Collection Framework ◦ Set ◦ Map 2.
Building Java Programs Chapter 11 Lecture 11-1: Sets and Maps reading:
Chapter 18 Java Collections Framework
1 TCSS 143, Autumn 2004 Lecture Notes Java Collection Framework: Maps and Sets.
1 Building Java Programs Java Collections Framework.
Data structures Abstract data types Java classes for Data structures and ADTs.
Collections in Java. 2 Collections Hierarchy > ArrayListVector Stack LinkedList > Arrays Collections.
3-February-2003cse Collections © 2003 University of Washington1 Java Collections CSE 403, Winter 2003 Software Engineering
CSE 143 Lecture 24 Advanced collection classes (ADTs; abstract classes; inner classes; generics; iterators) read 11.1, 9.6, , slides.
1 Collections Framework A collections framework is a unified architecture for representing and manipulating collections. All collections frameworks contain:
CSE 143 Lecture 2 ArrayList reading: 10.1 slides created by Marty Stepp
Copyright 2010 by Pearson Education Building Java Programs Chapter 10, 11 Lecture 22: 143 Preview optional reading: 10.1,
Collections Mrs. C. Furman April 21, Collection Classes ArrayList and LinkedList implements List HashSet implements Set TreeSet implements SortedSet.
1 TCSS 342, Winter 2005 Lecture Notes Linked List Implementation Weiss Ch. 6, pp Weiss Ch. 17, pp
© 2006 Pearson Addison-Wesley. All rights reserved5 B-1 Chapter 5 (continued) Linked Lists.
List Interface and Linked List Mrs. Furman March 25, 2010.
CSE 143 Lecture 2 More ArrayList ; classes and objects reading: 10.1; slides created by Marty Stepp and Hélène Martin
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
CMSC 202 Containers and Iterators. Container Definition A “container” is a data structure whose purpose is to hold objects. Most languages support several.
CSE 143 Lecture 12: Sets and Maps reading:
1 Copyright © 2011 Tata Consultancy Services Limited COLLECTIONS By TEAM 5 Rajendhiran Sivan Christi Yashwanth Bijay Smruthi Satyajit.
4-Mar-16 Introduction to Collections. Revision questions True false questions 0 for False 1 for True Please do not answer anything other than the above.
Collections Dwight Deugo Nesa Matic
CSE 143 Lecture 11: Sets and Maps reading:
3-1 Java's Collection Framework Another use of polymorphism and interfaces Rick Mercer.
 2016, Marcus Biel, ArrayList Marcus Biel, Software Craftsman
Slides by Donald W. Smith
CSE 143 Lecture 14 Interfaces; Abstract Data Types (ADTs)
Week 2: 10/1-10/5 Monday Tuesday Wednesday Thursday Friday
Road Map CS Concepts Data Structures Java Language Java Collections
Introduction to Collections
TCSS 143, Autumn 2004 Lecture Notes
TCSS 342, Winter 2006 Lecture Notes
slides adapted from Marty Stepp
TCSS 342, Winter 2005 Lecture Notes
Collections Framework
Introduction to Collections
Linked Lists Chapter 5 (continued)
slides created by Marty Stepp
TCSS 143, Autumn 2004 Lecture Notes
Part of the Collections Framework
Linked Lists Chapter 5 (continued)
Presentation transcript:

Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 11: Java Collections Framework

Copyright 2006 by Pearson Education 2 Chapter outline Lists Collections LinkedList vs. ArrayList Iterators Sets TreeSet vs. HashSet Set operations Maps Map operations Map views TreeMap vs. HashMap

Copyright 2006 by Pearson Education 3Lists reading: 11.1

Copyright 2006 by Pearson Education 4 Collections collection: an object that stores data inside it the objects stored are called elements some collections maintain an ordering, some don't some collections allow duplicates, some don't an array is like a very crude "collection" typical operations: add element, remove element, clear all elements, contains or find element, get size most collections are built with particular kinds of data, or particular operations on that data, in mind examples of collections: list, bag, stack, queue, set, map, graph

Copyright 2006 by Pearson Education 5 Java collections framework

Copyright 2006 by Pearson Education 6 Java's Collection interface The interface Collection in java.util represents many kinds of collections. Every collection has the following methods: Method nameDescription add( value ) adds the given value to the collection addAll( collection ) adds all elements from given collection to this one clear() removes all elements contains( value ) returns true if the element is in the collection containsAll( collection )true if this collection contains all elements from the other isEmpty() true if the collection does not contain any elements removeAll( collection ) removes all values contained in the given collection from this collection retainAll( collection ) removes all values not contained in the given collection from this collection size() returns the number of elements in the list toArray() returns an array containing the elements of this collection

Copyright 2006 by Pearson Education 7 Collection interface,cont'd. public boolean isEmpty() Returns true if this list contains no elements. public Iterator iterator() Returns a special object for examining the elements of the list in order (seen later). public boolean remove(Object o) Removes the first occurrence in this list of the specified element. public int size() Returns the number of elements in this list. public Object[] toArray() Returns an array containing all of the elements from this list.

Copyright 2006 by Pearson Education 8 An example collection: List list: an ordered sequence of elements, each accessible by a 0-based index one of the most basic collections

Copyright 2006 by Pearson Education 9 List features Maintains elements in the order they were added (new elements are added to the end by default) Duplicates are allowed Operations: add element to end of list insert element at given index clear all elements search for element get element at given index remove element at given index get size some of these operations are inefficient (seen later) The list manages its own size; the user of the list does not need to worry about overfilling it.

Copyright 2006 by Pearson Education 10 Java's List interface Java also has an interface List to represent a list of objects. It adds the following methods to those in Collection : (a partial list) public void add(int index, E element) Inserts the specified element at the specified position in this list. public E get(int index) Returns the element at the specified position in this list. public int indexOf(Object o) Returns the index in this list of the first occurrence of the specified element, or -1 if the list does not contain it.

Copyright 2006 by Pearson Education 11 List interface, cont'd. public int lastIndexOf(Object o) Returns the index in this list of the last occurrence of the specified element, or -1 if the list does not contain it. public E remove(int index) Removes the object at the specified position in this list. public Object set(int index, E element) Replaces the element at the specified position in this list with the specified element. Notice that the methods added to Collection by List all deal with indexes a list has indexes while a general collection may not

Copyright 2006 by Pearson Education 12 Array list limitations An add or remove operation on an ArrayList that is not at the end of the list will require elements to be shifted. This can be slow for a large list. What is the worst possible case?

Copyright 2006 by Pearson Education 13 The underlying issue the elements of an ArrayList are too tightly attached; can't easily rearrange them can we break the element storage apart into a more dynamic and flexible structure?

Copyright 2006 by Pearson Education 14 Linked list linked list: a list implemented using a linked sequence of values each value is stored in a small object called a node, which also contains references to its neighbor nodes the list keeps a reference to the first and/or last node in Java, represented by the class LinkedList

Copyright 2006 by Pearson Education 15 LinkedList usage example A LinkedList can be used much like an ArrayList : LinkedList words = new LinkedList (); words.add("hello"); words.add("goodbye"); words.add("this"); words.add("that");

Copyright 2006 by Pearson Education 16 Adding elements to the list

Copyright 2006 by Pearson Education 17 Linked list performance To add, remove, get a value at a given index: The list must advance through the list to the node just before the one with the proper index. Example: To add a new value to the list, the list creates a new node, walks along its existing node links to the proper index, and attaches it to the nodes that should precede and follow it. This is very fast when adding to the front or back of the list (because the list contains references to these places), but slow elsewhere.

Copyright 2006 by Pearson Education 18 Iterators

Copyright 2006 by Pearson Education 19 A particularly slow idiom List list = new LinkedList (); //... (put a lot of data into the list) // print every element of linked list for (int i = 0; i < list.size(); i++) { Object element = list.get(i); System.out.println(i + ": " + element); } This code executes a slow operation ( get ) every pass through a loop that runs many times this code will take prohibitively long to run for large data sizes

Copyright 2006 by Pearson Education 20 The problem of position The code on the previous slide is wasteful because it throws away the position each time. Every call to get has to re-traverse the list. It would be much better if we could somehow keep the list in place at each index as we looped through it. Java uses special objects to represent a position of a collection as it's being examined These objects are called iterators.

Copyright 2006 by Pearson Education 21 Iterators in Java interface Iterator public boolean hasNext() Returns true if there are more elements to see public E next() Returns the next object in this collection, then advances the iterator; throws an exception if no more elements remain public void remove() Deletes the element that was last returned by next (not always supported)

Copyright 2006 by Pearson Education 22 Iterators on linked lists an iterator on a linked list maintains (at least) its current index and a reference to that node when iterator() is called on a linked list, the iterator initially refers to the first node (index 0)

Copyright 2006 by Pearson Education 23 Linked list iterator iteration When next() is called, the iterator: grabs its current node's element value ( "a" ) follows the next reference on its node and increments its index returns the element it grabbed ( "a" ) hasNext is determined by whether the iterator has reached the back of the list

Copyright 2006 by Pearson Education 24 Iterator's remove The remove removes the last value that was returned by a call to next in other words, it deletes the element just before the iterator's current node

Copyright 2006 by Pearson Education 25 Fixing the slow LL idiom // print every element of the list for (int i = 0; i < list.size(); i++) { Object element = list.get(i); System.out.println(i + ": " + element); } Iterator itr = list.iterator(); for (int i = 0; itr.hasNext(); i++) { Object element = itr.next(); System.out.println(i + ": " + element); }

Copyright 2006 by Pearson Education 26 Iterator usage idiom The standard idiom of using an iterator: Iterator itr =.iterator(); while (itr.hasNext()) { ; } The following code efficiently removes all Strings with an even number of characters from a linked list: // removes all strings of even length from the list public static void removeEvenLength(LinkedList list) { Iterator i = list.iterator(); while (i.hasNext()) { String element = i.next(); if (element.length() % 2 == 0) { i.remove(); }

Copyright 2006 by Pearson Education 27 Benefits of iterators speed up loops over linked lists' elements a unified way to examine all elements of a collection every collection in Java has an iterator method in fact, that's the only guaranteed way to examine the elements of any Collection don't need to look up different collections' method names to see how to examine their elements don't have to use indexes as much on lists

Copyright 2006 by Pearson Education 28 Iterator is still not perfect // print odd-valued elements, with their indexes Iterator itr = list.iterator(); for (int i = 0; itr.hasNext(); i++) { int element = itr.next(); if (element % 2 == 1) { System.out.println(i + ": " + element); } i++; } We still had to maintain the index variable i so that we could print the index of each element. We can't use the iterator to add or set elements. The iterator is programmed to crash if the list is modified externally while the iterator is examining it.

Copyright 2006 by Pearson Education 29 More iterator problems // add a 0 after any odd element Iterator itr = list.iterator(); int i = 0; while (itr.hasNext()) { int element = itr.next(); if (element % 2 == 1) { list.add(i, new Integer(0)); // fails } the iterator speeds up get and remove loops only the iterator really should be able to help us speed up loops that add elements or set elements' values!

Copyright 2006 by Pearson Education 30 Concurrent modification public void doubleList(LinkedList list) { Iterator i = list.iterator(); while (i.hasNext()) { int next = i.next(); list.add(next); // ConcurrentModificationException } While you are still iterating, you cannot call any methods on the list that modify the list's contents. The above code crashes with a ConcurrentModificationException. It is okay to call a method on the iterator itself that modifies the list ( remove )

Copyright 2006 by Pearson Education 31 List abstract data type (ADT) abstract data type (ADT): a general specification for a type of data structure specifies what data the data structure can hold specifies what operations can be performed on that data does NOT specify exactly how the data structure holds the data internally, nor how it implements each operation Example ADT: List list ADT specifies that a list collection will store elements in order with integer indexes (allowing duplicates and null values) list ADT specifies that a list collection supports add, remove, get(index), set(index), size, isEmpty,... ArrayList and LinkedList both implement the data/operations specified by the list ADT ADTs in Java are specified by interfaces ArrayList and LinkedList both implement List interface

Copyright 2006 by Pearson Education 32 ADT usage example The following method can accept either an ArrayList or a LinkedList as its parameter: // returns the longest string in the given list // pre: list.size() > 0 public static String longest(List list) { Iterator i = list.iterator(); String result = i.next(); while (i.hasNext()) { String next = i.next(); if (next.length() > result.length()) { result = next; } return result; }

Copyright 2006 by Pearson Education 33 Collections class The following static methods in the Collections class operate on either type of list. Example: Collections.replaceAll(list, "hello", "goodbye"); Method nameDescription binarySearch( list, value ) searches a sorted list for a value and returns its index copy( dest, source ) copies all elements from one list to another fill( list, value ) replaces all values in the list with the given value max( list ) returns largest value in the list min( list ) returns smallest value in the list replaceAll( list, oldValue, newValue ) replaces all occurrences of oldValue with newValue reverse( list ) reverses the order of elements in the list rotate( list, distance ) shifts every element's index by the given distance sort( list ) places the list's elements into natural sorted order swap( list, index1, index2 ) switches element values at the given two indexes

Copyright 2006 by Pearson Education 34Sets reading: 10.2

Copyright 2006 by Pearson Education 35 Application: words in a book Write an application that reads in the text of a book (say, Moby Dick) and then lets the user type words, and tells whether those words are contained in Moby Dick or not. How would we implement this with a List? Would this be a good or bad implementation? Notice that the code to solve this problem doesn't use much of the list functionality (only add and search) Does the ordering of the elements in the List affect the algorithm? Could we use this information to our advantage?

Copyright 2006 by Pearson Education 36 A new ADT: Set set: an unordered collection with no duplicates The main purpose of a set is to search it, to test objects for membership in the set ( contains ). Java has an interface named Set to represent this kind of collection. Set is an interface; you can't say new Set() There are two Set implementations in Java: TreeSet and HashSet Java's set implementations have been optimized so that it is very fast to search for elements in them.

Copyright 2006 by Pearson Education 37 Java Set interface Interface Set has exactly the methods of the Collection interface TreeSet and HashSet classes implement the Set interface. Set set = new TreeSet (); Notice: These list methods are missing from Set : get( index ) add( index, value ) remove( index ) To access each element of a set, use its iterator method instead.

Copyright 2006 by Pearson Education 38 Set usage example The following code illustrates the usage of a set: Set stooges = new HashSet (); stooges.add("Larry"); stooges.add("Moe"); stooges.add("Curly"); stooges.add("Moe"); // duplicate, won’t be added stooges.add("Shemp"); stooges.add("Moe"); // duplicate, won’t be added System.out.println(stooges); Output: [Moe, Shemp, Larry, Curly] Notice that the order of the stooges doesn't match the order in which they were added, nor is it the natural alphabetical order.

Copyright 2006 by Pearson Education 39 TreeSet vs. HashSet The preceding code can use TreeSet instead: Set stooges = new TreeSet ();... System.out.println(stooges); Output: [Curly, Larry, Moe, Shemp] TreeSet vs. HashSet : A TreeSet stores its elements in the natural alphabetical order. TreeSet can only be used with elements with an ordering (it can't easily store Point objects, for example). TreeSet is slightly (often not noticeably) slower than HashSet.

Copyright 2006 by Pearson Education 40 Set operations Sets support common operations to combine them with, or compare them against, other sets:

Copyright 2006 by Pearson Education 41 Typical set operations sometimes it is useful to compare sets: subset: S1 is a subset of S2 if S2 contains every element from S1. containsAll tests for a subset relationship. it can be useful to combine sets in the following ways: union: S1 union S2 contains all elements that are in S1 or S2. addAll performs set union. intersection: S1 intersect S2 contains only the elements that are in both S1 and S2. retainAll performs set intersection. difference: S1 difference S2 contains the elements that are in S1 that are not in S2. removeAll performs set difference.

Copyright 2006 by Pearson Education 42Maps reading: 10.3

Copyright 2006 by Pearson Education 43 A variation: book word count Previously, we discussed an application that reads in the text of a book (say, Moby Dick) and then lets the user type words, and tells whether those words are contained in Moby Dick or not. What if we wanted to change this program to not only tell us whether the word exists in the book, but also how many times it occurs?

Copyright 2006 by Pearson Education 44 Mapping between sets sometimes we want to create a mapping between elements of one set and another set example: map words to their count in the book "the"-->325 "whale"-->14 example: map people to their phone numbers "Marty Stepp"-->" " "Jenny"-->" " How would we do this with a list (or list(s))? A list doesn't map people to phone numbers; it maps int s from 0.. size - 1 to objects Could we map some int to a person's name, and the same int to the person's phone number? How would we find a phone number, given the person's name? Is this a good solution?

Copyright 2006 by Pearson Education 45 Map diagram A map associates each key with a value.

Copyright 2006 by Pearson Education 46 A new ADT: Map map: an unordered collection that associates a collection of element values with a set of keys so that elements they can be found very quickly Each key can appear at most once (no duplicate keys) A key maps to at most one value the main operations: put(key, value) "Map this key to that value." get(key) "What value, if any, does this key map to?" Maps are represented in Java by the Map interface. Two implementations: HashMap and TreeMap

Copyright 2006 by Pearson Education 47 Map methods Maps don't implement the Collection interface, but they do have the following public methods: Method nameDescription clear() removes all keys and values from the map containsKey( key ) returns true if the given key exists in the map containsValue( value ) returns true if the given value exists in the map get( key ) returns the value associated with the given key ( null if not found) isEmpty() returns true if the map has no keys or values keySet() returns a collection of all keys in the map put( key, value ) associates the given key with the given value putAll( map ) adds all key/value mappings from given map remove( key ) removes the given key and its associated value size() returns the number of key/value pairs in the map values() returns a collection of all values in the map

Copyright 2006 by Pearson Education 48 Basic Map usage Maps are declared with two type parameters, one for the keys and one for the values: Map salaryMap = new HashMap (); salaryMap.put("Stuart", ); salaryMap.put("Marty", ); salaryMap.put("Jenny", ); System.out.println(salaryMap); // search the map for a name if (salaryMap.containsKey("Jenny")) { double salary = salaryMap.get("Jenny"); System.out.println("Jenny's salary is $" + salary); } else { System.out.println("I don't have a record for Jenny"); } Output: {Jenny= , Stuart= , Marty= } Jenny's salary is $

Copyright 2006 by Pearson Education 49 TreeMap vs. HashMap Remember that Map is an interface. You can't say Map m = new Map(); Java has two classes that implement the Map interface: TreeMap elements are stored in their natural Comparable order slightly slower can only be used on elements with an ordering HashMap elements are stored in an unpredictable order faster to add, search, remove

Copyright 2006 by Pearson Education 50 Collection views A map itself is not regarded as a collection. Map does not implement Collection interface although, in theory, it could be seen as a collection of pairs Instead collection views of a map may be obtained: a Set of its keys a Collection of its values (not a set... why?)

Copyright 2006 by Pearson Education 51 Iterators and Map s Map has no iterator method; you can't get an Iterator directly You must first call either: keySet() returns a Set of all the keys in this Map values() returns a Collection of all the values in this Map Then call iterator() on the key set or value collection. Examples: Iterator keyItr = grades.keySet().iterator(); Iterator elementItr = grades.values().iterator(); You can also use the enhanced for loop over these collections: for (int ssn : ssnMap.values()) { System.out.println("Social security #: " + ssn); }

Copyright 2006 by Pearson Education 52 Map example import java.util.*; public class Birthday { public static void main(String[] args){ Map m = new HashMap (); m.put("Newton", 1642); m.put("Darwin", 1809); System.out.println(m); Set keys = m.keySet(); Iterator itr = keys.iterator(); while (itr.hasNext()) { String key = itr.next(); System.out.println(key + " => " + m.get(key)); } Output: {Darwin=1809, Newton=1642} Darwin => 1809 Newton => 1642

Copyright 2006 by Pearson Education 53 Map practice problems Write code to invert a Map ; that is, to make the values the keys and make the keys the values. Map byName = new HashMap (); byName.put("Darwin", " "); byName.put("Newton", " "); Map byPhone = new HashMap (); //... your code here! System.out.println(byPhone); Output: { =Darwin, =Newton} Write a program to count words in a text file, using a hash map to store the number of occurrences of each word.