Principles of Software Construction: Objects, Design and Concurrency. Java Collections. toad 15-214. Fall 2013



Similar documents
Class 32: The Java Collections Framework

Collections in Java. Arrays. Iterators. Collections (also called containers) Has special language support. Iterator (i) Collection (i) Set (i),

Generic Types in Java. Example. Another Example. Type Casting. An Aside: Autoboxing 4/16/2013 GENERIC TYPES AND THE JAVA COLLECTIONS FRAMEWORK.

Practical Session 4 Java Collections

Data Structures in the Java API

Masters programmes in Computer Science and Information Systems. Object-Oriented Design and Programming. Sample module entry test xxth December 2013

The Java Collections Framework

CMSC 202H. ArrayList, Multidimensional Arrays

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

Data Structures and Algorithms

Java Interview Questions and Answers

AP Computer Science Java Subset

CSE 2123 Collections: Sets and Iterators (Hash functions and Trees) Jeremy Morris

dictionary find definition word definition book index find relevant pages term list of page numbers

CompSci-61B, Data Structures Final Exam

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

Java Collection Framework hierarchy. What is Data Structure? Chapter 20 Lists, Stacks, Queues, and Priority Queues

cs2010: algorithms and data structures

Software Development with UML and Java 2 SDJ I2, Spring 2010

Per imparare a programmare bisogna programmare

A binary search tree or BST is a binary tree that is either empty or in which the data element of each node has a key, and:

CMSC 132: Object-Oriented Programming II. Design Patterns I. Department of Computer Science University of Maryland, College Park

CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013

API for java.util.iterator. ! hasnext() Are there more items in the list? ! next() Return the next item in the list.

Translating to Java. Translation. Input. Many Level Translations. read, get, input, ask, request. Requirements Design Algorithm Java Machine Language

Principles of Software Construction: Objects, Design and Concurrency. GUIs with Swing. toad Spring 2013

J a v a Quiz (Unit 3, Test 0 Practice)

Java Map and Set collections

CS 2112 Spring Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions

MULTIPLE CHOICE. Choose the one alternative that best completes the statement or answers the question.

CS 111 Classes I 1. Software Organization View to this point:

Chapter 2 Introduction to Java programming

Working with Java Collections

1.00 Lecture 1. Course information Course staff (TA, instructor names on syllabus/faq): 2 instructors, 4 TAs, 2 Lab TAs, graders

COSC Introduction to Computer Science I Section A, Summer Question Out of Mark A Total 16. B-1 7 B-2 4 B-3 4 B-4 4 B Total 19

You are to simulate the process by making a record of the balls chosen, in the sequence in which they are chosen. Typical output for a run would be:

Handout 3 cs180 - Programming Fundamentals Spring 15 Page 1 of 6. Handout 3. Strings and String Class. Input/Output with JOptionPane.

Sample CSE8A midterm Multiple Choice (circle one)

Java Basics: Data Types, Variables, and Loops

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq

Problem 1. CS 61b Summer 2005 Homework #2 Due July 5th at the beginning of class

15-214: Principles of Software Construction 8 th March 2012

Introduction to Java

JDK 1.5 Updates for Introduction to Java Programming with SUN ONE Studio 4

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

Mobile App Design Project #1 Java Boot Camp: Design Model for Chutes and Ladders Board Game

Introducing Variance into the Java Programming Language DRAFT

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

Chulalongkorn University International School of Engineering Department of Computer Engineering Computer Programming Lab.

Designing with Exceptions. CSE219, Computer Science III Stony Brook University

Preet raj Core Java and Databases CS4PR. Time Allotted: 3 Hours. Final Exam: Total Possible Points 75

Quick Introduction to Java

Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.

Licensed for viewing only. Printing is prohibited. For hard copies, please purchase from

e ag u g an L g ter lvin v E ram Neal G g ro va P Ja

CSE 1223: Introduction to Computer Programming in Java Chapter 7 File I/O

CS170 Lab 11 Abstract Data Types & Objects

Arrays in Java. Working with Arrays

Stacks. Data Structures and Data Types. Collections

Crash Course in Java

Computer Programming I

Building Java Programs

Basic Programming and PC Skills: Basic Programming and PC Skills:

Building Java Programs

Java Programming Fundamentals

Stacks and queues. Algorithms and Data Structures, Fall Rasmus Pagh. Based on slides by Kevin Wayne, Princeton

Classes and Objects in Java Constructors. In creating objects of the type Fraction, we have used statements similar to the following:

Unit 6. Loop statements

UIL Computer Science for Dummies by Jake Warren and works from Mr. Fleming

AP Computer Science Java Mr. Clausen Program 9A, 9B

JAVA - QUICK GUIDE. Java SE is freely available from the link Download Java. So you download a version based on your operating system.

Basic Java Constructs and Data Types Nuts and Bolts. Looking into Specific Differences and Enhancements in Java compared to C

Course: Programming II - Abstract Data Types. The ADT Stack. A stack. The ADT Stack and Recursion Slide Number 1

Continuous Integration Part 2

Scoping (Readings 7.1,7.4,7.6) Parameter passing methods (7.5) Building symbol tables (7.6)

D06 PROGRAMMING with JAVA

Creating a Simple, Multithreaded Chat System with Java

Java CPD (I) Frans Coenen Department of Computer Science

Programming Methods & Java Examples

Moving from CS 61A Scheme to CS 61B Java

COMPUTER SCIENCE. Paper 1 (THEORY)

Chapter 8: Bags and Sets

Chapter 1 Java Program Design and Development

System.out.println("\nEnter Product Number 1-5 (0 to stop and view summary) :

Computer Science 210: Data Structures. Searching

GUIs with Swing. Principles of Software Construction: Objects, Design, and Concurrency. Jonathan Aldrich and Charlie Garrod Fall 2012

12-6 Write a recursive definition of a valid Java identifier (see chapter 2).

Fundamentals of Java Programming

ECE 250 Data Structures and Algorithms MIDTERM EXAMINATION /5:15-6:45 REC-200, EVI-350, RCH-106, HH-139

Introduction to Object-Oriented Programming

For live Java EE training, please see training courses

public static void main(string[] args) { System.out.println("hello, world"); } }

Transcription:

Principles of Software Construction: Objects, Design and Concurrency Java Collections toad 15-214 Fall 2013 Jonathan Aldrich Charlie Garrod School of Computer Science 2012-13 C Garrod, J Aldrich, and W Scherlis

Administrivia Midterm exam in class next Tuesday, 15 Oct Midterm review session Sunday 1 3 p.m., Hamburg Hall 1000 Review sheet will be released before the review session Will also release a sample midterm exam soon 2

Key concepts from Tuesday 3

Key concepts from Tuesday GUIs The Model-View-Controller pattern The Observer pattern Java Swing architecture Threading architecture Swing components Using the Observer pattern in Swing 4

Design patterns we have seen so far: Composite Template Method Strategy Observer Model-View-Controller Decorator 5

Key concepts for today A tour of the Java Collections Framework Some of the features Some of the common usage patterns Some of the design patterns in use Iterator, Marker Interface, Factory Method, Adapter, Strategy, Decorator, Template Method 6

The philosophy of the Collections framework Powerful and general Small in size and conceptual weight Only include fundamental operations "Fun and easy to learn and use" 7

The java.util.collection<e> interface boolean add(e e);! boolean addall(collection<e> c);! boolean remove(e e);! boolean removeall(collection<e> c);! boolean retainall(collection<e> c);! boolean contains(e e);! boolean containsall(collection<e> c);! void clear();! int size();! boolean isempty();! Iterator<E> iterator();! Object[] toarray()! E[] toarray(e[] a);!! 8

The java.util.list<e> interface Defines order of a collection Extends java.util.collection<e>: boolean add(int index, E e);! E get(int index);! E set(int index, E e);! int indexof(e e);! int lastindexof(e e);! List<E> sublist(int fromindex, int toindex);! 9

The java.util.set<e> interface Enforces uniqueness of each element in collection Extends java.util.collection<e>: Aside: The Marker Interface pattern Problem: You want to define a behavioral constraint not enforced at compile time. Solution: Define an interface with no methods. 10

The java.util.queue<e> interface Extends java.util.collection<e>: boolean add(e e); // These three methods! E remove(); // might throw exceptions! E element();!! boolean offer(e e);! E poll(); // These two methods! E peek(); // might return null! 11

The java.util.map<k,v> interface Does not extend java.util.collection<e> V put(k key, V value);! V get(object key);! V remove(object key);! boolean containskey(object key);! boolean containsvalue(object value);! void putall(map<k,v> m);! int size();! boolean isempty();! void clear();! Set<K> keyset();! Collection<V> values(); Set<Map.Entry<K,V>> entryset();! 12

One problem: Java arrays are not Collections To convert a Collection to an array Use the toarray method List<String> arguments = new LinkedList<String>();! // puts something into the list! String[] arr = (String[]) arguments.toarray();! String[] brr = arguments.toarray(new String[0]); To view an array as a Collection Use the java.util.arrays.aslist method String[] arr = {"foo", "bar", "baz", "qux"};! List<String> arguments = Arrays.asList(arr);! 13

One problem: Java arrays are not Collections To convert a Collection to an array Use the toarray method List<String> arguments = new LinkedList<String>();! // puts something into the list! String[] arr = (String[]) arguments.toarray();! String[] brr = arguments.toarray(new String[0]); To view an array as a Collection Use the java.util.arrays.aslist method String[] arr = {"foo", "bar", "baz", "qux"};! List<String> arguments = Arrays.asList(arr);! Aside: The Adapter pattern Problem: Existing library or class does not match the interface you want Solution: Expose the functionality of the object in a different form! 14

What do you want to do with your Collection today? 15

Traversing a Collection Old-school Java for loop for ordered types List<String> arguments = ;! for (int i = 0; i < arguments.size(); ++i) {! System.out.println(arguments.get(i));! Modern standard Java for-each loop List<String> arguments = ;! for (String s : arguments) {! System.out.println(s);! } Use an Iterator 16

The Iterator pattern public interface java.util.iterator<e> {! boolean hasnext();! E next();! void remove(); // removes previous returned item! } // from the underlying collection! To use, e.g.: List<String> arguments = ;! for (Iterator<String> it = arguments.iterator();! it.hasnext(); ) {! String s = it.next();! System.out.println(s);! 17

Using a java.util.iterator<e> public interface Iterator<E> {! boolean hasnext();! E next();! void remove(); // removes previous returned item! } // from the underlying collection! To use to remove items, e.g.: List<String> arguments = ;! for (Iterator<String> it = arguments.iterator();! it.hasnext(); ) {! String s = it.next();! if (s.equals("charlie"))! it.remove();! // The next line will always print false! System.out.println(arguments.contains("Charlie"));!! 18

Using a java.util.iterator<e>: A warning The default Collections implementations are mutable The java.util.iterator assumes the Collection does not change while the Iterator is being used You will get a ConcurrentModificationException! List<String> arguments = ;! for (Iterator<String> it = arguments.iterator();! it.hasnext(); ) {! String s = it.next();! if (s.equals("charlie"))! arguments.remove("charlie"); // runtime error! 19

Aside: The Factory Method pattern public interface Collection<E> {! boolean add(e e);! boolean addall(collection<e> c);! boolean remove(e e);! boolean removeall(collection<e> c);! boolean retainall(collection<e> c);! boolean contains(e e);! boolean containsall(collection<e> c);! void clear();! int size();! Defines an interface for boolean isempty();! creating an Iterator, Iterator<E> iterator();! but allows Collection Object[] toarray()! implementation to decide E[] toarray(e[] a);! which Iterator to create. 20

Sorting a Collection Use the Collections.sort method: public static void main(string[] args) {! List<String> lst = Arrays.asList(args);! Collections.sort(lst);! for (String s : lst) {! System.out.println(s);! Abuse the SortedSet: public static void main(string[] args) {! SortedSet<String> set =! new TreeSet<String>(Arrays.asList(args));! for (String s : set) {! System.out.println(s);! 21

Sorting your own types of objects public interface Comparable<T> {! int compareto(t o);! General contracts: a.compareto(b) should return: <0 if a is less than b! 0 if a and b are equal >0 if a is greater than b! Should define a total order If a.compareto(b) < 0 and b.compareto(c) < 0, then a.compareto(c) should be < 0 If a.compareto(b) < 0, then b.compareto(a) should be > 0 Should usually be consistent with.equals! a.compareto(b) == 0 iff a.equals(b)! 22

Comparable objects an example public class Integer implements Comparable<Integer> {! private int val;! public Integer(int val) { this.val = val;! public int compareto(integer o) {! if (val < o.val) return -1;! if (val == o.val) return 0;! return 1;! } Aside: Why did I not just return val o.val? 23

Comparable objects another example! Make Name comparable:! public class Name {! private String first;! private String last;! public Name(String first, String last) { // should! this.first = first; this.last = last; // check! } // for null!!!!!! } Hint: Strings implement Comparable<String>! 24

Comparable objects another example! Make Name comparable:! public class Name implements Comparable<Name> {! private String first;! private String last;! public Name(String first, String last) { // should! this.first = first; this.last = last; // check! } // for null!! public int compareto(name o) {! int lastcomparison = last.compareto(o.last);! if (lastcomparison!= 0) return lastcomparison;! return first.compareto(o.first);! 25

Alternative comparisons public class Employee implements Comparable<Employee> {! protected Name name;! protected int salary;!! } What if we want to sort Employees by name, usually, but sometimes sort by salary? 26

Alternative comparisons public class Employee implements Comparable<Employee> {! protected Name name;! protected int salary;!! } What if we want to sort Employees by name, usually, but sometimes sort by salary? Answer: There's a Strategy pattern interface for that public interface Comparator<T> {! public int compare(t o1, T o2);! public boolean equals(object obj);! } 27

Writing a Comparator object public class Employee implements Comparable<Employee> {! protected Name name;! protected int salary;! public int compareto(employee o) {! return name.compareto(o.name);!! public class EmpSalComp implements Comparator<Employee> { public int compare (Employee o1, Employee o2) {! return o1.salary o2.salary; // Why is this OK?! public boolean equals(object obj) {! return obj instanceof EmpSalComp;! } 28

Using a Comparator Order-dependent classes and methods take a Comparator as an argument public class Main {! public static void main(string[] args) {! SortedSet<Employee> empbyname = // sorted by name! new TreeSet<Employee>();!! SortedSet<Employee> empbysal = // sorted by salary! new TreeSet<Employee>(new EmpSalComp());! 29

Aside: The java.util.sortedset<e> interface Extends java.util.set<e>: Comparator<E> comparator();! E first();! E last();! SortedSet<E> subset(e fromelement, E toelement);! SortedSet<E> headset(e toelement);! SortedSet<E> tailset(e fromelement); The comparator method returns null if the natural ordering is being used 30

The java.util.collections class Standard implementations of common algorithms binarysearch, copy, fill, frequency, indexofsublist, min, max, ncopies, replaceall, reverse, rotate, shuffle, sort, swap, public class Main() {! public static void main(string[] args) {! List<String> lst = Arrays.asList(args);! Collections.sort(lst);! for (String s : lst) {! System.out.println(s);! 31

The java.util.collections class Standard implementations of common algorithms binarysearch, copy, fill, frequency, indexofsublist, min, max, ncopies, replaceall, reverse, rotate, shuffle, sort, swap, public class Main() {! public static void main(string[] args) {! List<String> lst = Arrays.asList(args);! int x = Collections.frequency(lst, "Charlie");! System.out.println("There are " + x +! " students named Charlie");! 32

The java.util.collections class Many uses of the Decorator pattern: static List<T> unmodifiablelist(list<t> lst);! static Set<T> unmodifiableset( Set<T> set);! static Map<K,V> unmodifiablemap( Map<K,V> map);! static List<T> synchronizedlist(list<t> lst);! static Set<T> synchronizedset( Set<T> set);! static Map<K,V> synchronizedmap( Map<K,V> map);!.!.!. 33

The java.util.collections class An actual method declaration static int binarysearch(! List<? extends Comparable<? super T>> list,! T key);! An object of some type T to search for A List of objects of some type that has a compareto method that can take an object of type T as an argument 34

Java Collections as a framework You can write specialty collections Custom representations and algorithms Custom behavioral guarantees e.g., file-based storage JDK built-in algorithms would then be calling your collections code 35

The abstract java.util.abstractlist<t> abstract T get(int i); // Template Method.! abstract int size(); // Template Method.! boolean set(int i, E e); // set add remove are! boolean add(e e); // pseudo-abstract! boolean remove(e e); // Template Methods.! boolean addall(collection<e> c);! boolean removeall(collection<e> c);! boolean retainall(collection<e> c);! boolean contains(e e);! boolean containsall(collection<e> c);! void clear();! boolean isempty();! Iterator<E> iterator();! Object[] toarray()! E[] toarray(e[] a);!! 36

Next time Midterm exam on Tuesday 37