Java Collections Framework. 24 April 2013 OSU CSE 1

Similar documents
Collections Framework: Part 2

Class 32: The Java Collections Framework

Type Parameters: E - the type of elements returned by this iterator Methods Modifier and Type Method and Description

Software 1 with Java. Java Collections Framework. Collection Interfaces. Online Resources. The Collection Interface

תוכנה 1 מבני נתונים גנריים

Abstract data types (again) Announcements. Example ADT an integer bag (next) The Java Collections Framework

DM550 Introduction to Programming part 2. Jan Baumbach.

Generics Collection Framework

COMP6700/2140 Abstract Data Types: Queue, Set, Map

PIC 20A Collections and Data Structures

CSC 1214: Object-Oriented Programming

27/04/2012. Objectives. Collection. Collections Framework. "Collection" Interface. Collection algorithm. Legacy collection

Collections (Collection Framework) Sang Shin Java Technology Architect Sun Microsystems, Inc.

Topic 10: The Java Collections Framework (and Iterators)

תוכנה 1 מבני נתונים גנריים

Generic classes & the Java Collections Framework. *Really* Reusable Code

CMSC 202H. Containers and Iterators

Arrays organize each data element as sequential memory cells each accessed by an index. data data data data data data data data

CISC 3115 TY3. C28a: Set. Hui Chen Department of Computer & Information Science CUNY Brooklyn College. 11/29/2018 CUNY Brooklyn College

CONTAİNERS COLLECTİONS

DM550 Introduction to Programming part 2. Jan Baumbach.

Family Name:... Other Names:... ID Number:... Signature... Model Solutions. COMP 103: Test 1. 9th August, 2013

Model Solutions. COMP 103: Test April, 2013

Collections. Powered by Pentalog. by Vlad Costel Ungureanu for Learn Stuff

Java Collections. Readings and References. Collections Framework. Java 2 Collections. References. CSE 403, Winter 2003 Software Engineering

Software 1 with Java. Recitation No. 6 (Collections)

Object Oriented Programming and Design in Java. Session 19 Instructor: Bert Huang

Topic #9: Collections. Readings and References. Collections. Collection Interface. Java Collections CSE142 A-1

What is the Java Collections Framework?

Java Collections. Readings and References. Collections Framework. Java 2 Collections. CSE 403, Spring 2004 Software Engineering

36. Collections. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

Collections Questions

SUMMARY INTRODUCTION COLLECTIONS FRAMEWORK. Introduction Collections and iterators Linked list Array list Hash set Tree set Maps Collections framework

U N I V E R S I T Y O F W E L L I N G T O N EXAMINATIONS 2018 TRIMESTER 2 COMP 103 PRACTICE EXAM

Collection Framework Collection, Set, Queue, List, Map 3

Generic Collections CSC Spring 2019 Howard Rosenthal

EXAMINATIONS 2015 COMP103 INTRODUCTION TO DATA STRUCTURES AND ALGORITHMS

Java Collections Framework reloaded

COMP 103 : Test. 2019, Jan 9 ** WITH SOLUTIONS **

Sets and Maps. Part of the Collections Framework

Lecture 6 Collections

COURSE 4 PROGRAMMING III OOP. JAVA LANGUAGE

182 review 1. Course Goals

Lecture 16: Case Study: The Java Collections API

EXAMINATIONS 2016 TRIMESTER 2

Java Interfaces. 6 April 2016 OSU CSE 1

Vector (Java 2 Platform SE 5.0) Overview Package Class Use Tree Deprecated Index Help

[Ref: Core Java Chp 13, Intro to Java Programming [Liang] Chp 22, Absolute Java Chp 16, docs.oracle.com/javase/tutorial/collections/toc.

Need to access each element of a list. Use index to access an element of the list. It s quadratic, while:

COMP 103 : Test. 2018, Sept 12//(Corrected)

CSE 373. Java Collection Framework. reading: Weiss Ch. 3, 4.8. slides created by Marty Stepp

11-1. Collections. CSE 143 Java. Java 2 Collection Interfaces. Goals for Next Several Lectures

Chapter 5 Java Collection. Wang Yang

A simple map: Hashtable

COMP 103 : Test. 2018, Sept 12//(Corrected) ** WITH SOLUTIONS

Today's Agenda. > To give a practical introduction to data structures. > To look specifically at Lists, Sets, and Maps

CMSC 202. Containers

Framework. Set of cooperating classes/interfaces. Example: Swing package is framework for problem domain of GUI programming

U N I V E R S I T Y O F W E L L I N G T O N EXAMINATIONS 2018 TRIMESTER 2 COMP 103 INTRODUCTION TO DATA STRUCTURES AND ALGORITHMS

Top Down Design vs. Modularization

COMP6700/2140 Implementation of ADT

Assoc. Prof. Marenglen Biba. (C) 2010 Pearson Education, Inc. All rights reserved.

Framework in Java 5. DAAD project Joint Course on OOP using Java

JAVA. java.lang.stringbuffer java.lang.stringbuilder

CS61B Lecture #17. Last modified: Mon Oct 1 13:40: CS61B: Lecture #17 1

Agenda. Inner classes and implementation of ArrayList Nested classes and inner classes The AbstractCollection class Implementation of ArrayList

Computational Applications in Nuclear Astrophysics using Java Java course Lecture 6

Java Data Structures Collections Framework BY ASIF AHMED CSI-211 (OBJECT ORIENTED PROGRAMMING)

Collections (Java) Collections Framework

Collections class Comparable and Comparator. Slides by Mark Hancock (adapted from notes by Craig Schock)

Lecture 15 Summary. Collections Framework. Collections class Comparable and Comparator. Iterable, Collections List, Set Map

Java Collections Framework

CSC 321: Data Structures. Fall 2016

CSC 321: Data Structures. Fall 2017

Collections and Maps

CSE331 Winter 2014, Midterm Examination February 12, 2014

CS11 Java. Winter Lecture 8

Programming Languages and Techniques (CIS120)

Programming Languages and Techniques (CIS120)

Wentworth Institute of Technology COMP1050 Computer Science II Spring 2017 Derbinsky. Collections & Maps. Lecture 12. Collections & Maps

Model Solutions. COMP 103: Test May, 2013

The Collections API. Lecture Objectives. The Collections API. Mark Allen Weiss

Java Magistère BFA

Computer Science II (Spring )

Pieter van den Hombergh Richard van den Ham. February 8, 2018

EXAMINATIONS 2017 TRIMESTER 2

Implementation. Learn how to implement the List interface Understand the efficiency trade-offs between the ArrayList and LinkedList implementations

U N I V E R S I T Y O F W E L L I N G T O N EXAMINATIONS 2018 TRIMESTER 2 COMP 103 INTRODUCTION TO DATA STRUCTURES AND ALGORITHMS

EPITA Première Année Cycle Ingénieur. Atelier Java - J2

Java Collection Framework

Lecture 4. The Java Collections Framework

Questions and Answers. Q.3) asses is not part of Java's collection framework?explanation:

Outline. iterator review iterator implementation the Java foreach statement testing

Since it is an interface, we need a concrete class during its declaration. There are many ways to initialize a Queue object, most common being-

Object-Oriented Programming with Java

The Java Collections Framework. Chapters 7.5

Data abstractions: ADTs Invariants, Abstraction function. Lecture 4: OOP, autumn 2003

Chapter 10 Collections

EXAMINATIONS 2012 MID YEAR. COMP103 Introduction to Data Structures and Algorithms SOLUTIONS

Class Libraries. Readings and References. Java fundamentals. Java class libraries and data structures. Reading. Other References

Transcription:

Java Collections Framework 24 April 2013 OSU CSE 1

Overview The Java Collections Framework (JCF) is a group of interfaces and classes similar to the OSU CSE components The similarities will become clearly evident from examples See Java libraries package java.util There are some important differences, too, however, that deserve mention (at the end) 24 April 2013 OSU CSE 2

Overview of Interfaces Iterable Collection Map Set List Queue Sorted- Map Sorted- Set Deque Navigable- Map Navigable- Set 24 April 2013 OSU CSE 3

Overview of Interfaces Iterable Collection Map Set List Queue Sorted- Map Sorted- Set Navigable- Set Note: Map Deque does not extend Collection; but it is a collection. Navigable- Map 24 April 2013 OSU CSE 4

Overview of Interfaces Iterable Collection Map Set List Queue Sorted- Map Sorted- Set Navigable- Set Iterable is in java.lang Navigable- Deque (because of its intimate Map connection to for-each loops), but Iterator is in java.util. 24 April 2013 OSU CSE 5

Overview of Interfaces Iterable Subsequent slides discuss only certain interfaces. Collection Map Set List Queue Sorted- Map Sorted- Set Deque Navigable- Map Navigable- Set 24 April 2013 OSU CSE 6

The Collection<E> Interface Essentially a finite multiset of E No direct/efficient way to ask how many copies of a given element there are Two interesting methods to create arrays of the elements Many methods (including add, remove, clear) are optional 24 April 2013 OSU CSE 7

The Set<E> Interface Essentially a finite set of E No removeany or similar method, so you must use iterator to iterate over a Set Recall (from Iterator): The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress [except using Iterator.remove]. Many methods (including add, remove, clear) are optional 24 April 2013 OSU CSE 8

The List<E> Interface Essentially a string of E Access by position (similar to Sequence from OSU CSE components) Many methods (including add, remove, clear) are optional Two interesting additional features: Sublist views of a List A special two-way ListIterator 24 April 2013 OSU CSE 9

The List<E> Interface Essentially a string of E Access by position (similar to Sequence How do you move forward from OSU CSE components) and backward through a List from OSU CSE components? Many methods (including add, remove, clear) are optional Two interesting additional features: Sublist views of a List A special two-way ListIterator 24 April 2013 OSU CSE 10

The Queue<E> Interface Essentially a string of E Access at ends (similar to Queue from OSU CSE components) Here, add and remove are not optional add is similar to enqueue for OSU CSE components Queue remove is similar to dequeue Curious names for other methods, e.g., offer, peek, poll 24 April 2013 OSU CSE 11

The Map<K,V> Interface Essentially a finite set of (K,V) with the function property No removeany or similar method, so you must use iterator (somewhat indirectly) to iterate over a Map Many methods (including put, remove, clear) are optional Like List, a Map supports views of its elements 24 April 2013 OSU CSE 12

Views in the JCF A view is a subcollection of a collection Not a copy of some of the elements, but rather a collection within a collection that is manipulated in place Views for Map: Keys: Set<K> keyset() Values: Collection<V> values() Pairs: Set<Map.Entry<K,V>> entryset() 24 April 2013 OSU CSE 13

Views in the JCF A view is a subcollection of a collection Not a copy of some of the elements, but rather a collection within Map.Entry<K,V> a collection that in is the JCF is very similar to Map.Pair<K,V> manipulated in place Views for Map: in the OSU CSE components. Keys: Set<K> keyset() Values: Collection<V> values() Pairs: Set<Map.Entry<K,V>> entryset() 24 April 2013 OSU CSE 14

Example: Map<String, Integer> m Code State m = {("PB", 99), ("BK", 42), ("SA", 42)} Set<String> s = m.keyset(); m = {("PB", 99), ("BK", 42), ("SA", 42)} s = {"SA", "BK", "PB"} 24 April 2013 OSU CSE 15

Example: Map<String, Integer> m Note all the aliases here! Code There is no problem in this case because String is immutable, but consider the potential problems if it were not. Set<String> s = m.keyset(); State m = {("PB", 99), ("BK", 42), ("SA", 42)} m = {("PB", 99), ("BK", 42), ("SA", 42)} s = {"SA", "BK", "PB"} 24 April 2013 OSU CSE 16

Example: Map<String, Integer> m Code State m = {("PB", 99), ("BK", 42), ("SA", 42)} Collection<Integer> c = m.values(); m = {("PB", 99), ("BK", 42), ("SA", 42)} c = {42, 99, 42} 24 April 2013 OSU CSE 17

Example: Map<String, Integer> m Code Set<Map.Entry<String, Integer>> s = m.entryset(); State m = {("PB", 99), ("BK", 42)} m = {("PB", 99), ("BK", 42)} s = {("BK", 42), ("PB", 99)} 24 April 2013 OSU CSE 18

View Backed By Collection A view is backed by the underlying collection, which means that if the view is modified then the underlying ( backing ) collection is also modified, and vice versa See Javadoc for supported modifications Be especially careful when iterating over a view or a collection and trying to modify it 24 April 2013 OSU CSE 19

Example: List<Integer> s Code State s = <10, 7, 4, 2> s.sublist(1,3).clear(); s = <10, 2> 24 April 2013 OSU CSE 20

Example: Map<String, Integer> m Code State m = {("PB", 99), ("BK", 42), ("SA", 42)} m.values().remove(42); m = {("PB", 99), ("SA", 42)} 24 April 2013 OSU CSE 21

Example: Map<String, Integer> m Because remove for Collection Code (assuming it is available for m.values!) removes one copy, we do not know which pair remains in m. State m = {("PB", 99), ("BK", 42), ("SA", 42)} m.values().remove(42); m = {("PB", 99), ("SA", 42)} 24 April 2013 OSU CSE 22

Could remove Cause Trouble? The object (dynamic) type of m.values()in the above code might be an implementation of List or of Queue But not of Set; why not? The remove being called is optional if the object type of m.values() is a List implementation, but not if it is a Queue How can the client know what interface it implements? 24 April 2013 OSU CSE 23

Could remove Cause Trouble? The informal Javadoc for the values method says: The The object collection (dynamic) supports element type removal, of which m.values()in the above code might be the Iterator.remove, Collection.remove, an implementation of List or of Queue removes the corresponding mapping from the map, via removeall, retainall and clear operations. It does not support the add or addall operations. But not of Set; why not? The remove being called is optional if the object type of m.values() is a List implementation, but not if it is a Queue How can the client know what interface it implements? 24 April 2013 OSU CSE 24

Could remove Cause Trouble? Since values returns an object whose dynamic type supports remove but not add, apparently that return type implements a fictitious (phantom?) interface that is stronger than Collection, but different than all of Set, List, and Queue. The object (dynamic) type of m.values()in the above code might be an implementation of List or of Queue But not of Set; why not? The remove being called is optional if the object type of m.values() is a List implementation, but not if it is a Queue How can the client know what interface it implements? 24 April 2013 OSU CSE 25

Iterating Over a Map Because Map does not extend Iterable, but Collection (hence Set) does extend Iterable, you can (only) iterate over a Map using one of its three views: Keys: Set<K> keyset() Values: Collection<V> values() Pairs: Set<Map.Entry<K,V>> entryset() 24 April 2013 OSU CSE 26

Overview of Collection Classes Iterable Collection Object Abstract- Collection There are no classes that directly and fully implement Collection. 24 April 2013 OSU CSE 27

AbstractCollection Has code for many methods (shared, and possibly overridden, by all later implementations of Collection) : add remove clear... 24 April 2013 OSU CSE 28

AbstractCollection Has code for many methods (shared, and possibly overridden, by all later implementations of Collection) : add remove clear... This method s implementation here, for example, always throws an UnsupportedOperationException. 24 April 2013 OSU CSE 29

Overview of Set Classes Iterable Collection Object Set Abstract- Collection AbstractSet HashSet TreeSet 24 April 2013 OSU CSE 30

AbstractSet Has code for these methods (shared, and possibly overridden, by all later implementations of Set): equals hashcode removeall 24 April 2013 OSU CSE 31

HashSet Uses hashing in the Set representation Has code for these methods (overriding those in AbstractSet): add remove clear clone 24 April 2013 OSU CSE 32

HashSet Uses hashing in the Set representation Has code for these methods (overriding those in AbstractSet): add remove clear clone The first three methods, though optional, are implemented here and do what you should expect. 24 April 2013 OSU CSE 33

HashSet Uses hashing in the Set representation Has code for these methods (overriding those in AbstractSet): add remove clear clone The clone method makes a shallow copy, i.e., the elements are not cloned ; which raises many questions. Best practice: do not use it! 24 April 2013 OSU CSE 34

TreeSet Uses a balanced binary search tree as the Set representation Has code for several methods (overriding those in AbstractSet) 24 April 2013 OSU CSE 35

Overview of List Classes Iterable Collection Object List Abstract- Collection AbstractList ArrayList LinkedList 24 April 2013 OSU CSE 36

AbstractList Has code for many methods (shared, and possibly overridden, by all later implementations of List) Similar to AbstractSet but with code for many more methods (because List has many more potentially layered methods than Set) 24 April 2013 OSU CSE 37

ArrayList Uses arrays in the List representation Has code for many methods (overriding those in AbstractList) 24 April 2013 OSU CSE 38

LinkedList Uses a doubly-linked list as the List representation Has code for many methods (overriding those in AbstractList) There is even more detail to the interfaces and abstract classes related to LinkedList, which you can look up if interested 24 April 2013 OSU CSE 39

Overview of Map Classes Map Object AbstractMap HashMap TreeMap 24 April 2013 OSU CSE 40

AbstractMap Has code for many methods (shared, and possibly overridden, by all later implementations of Map) Similar to AbstractSet but with code for many more methods (because Map has many more potentially layered methods than Set) 24 April 2013 OSU CSE 41

HashMap Uses hashing in the Map representation Has code for many methods (overriding those in AbstractMap) 24 April 2013 OSU CSE 42

TreeMap Uses a balanced binary search tree as the Map representation Has code for several methods (overriding those in AbstractMap) 24 April 2013 OSU CSE 43

JCF Algorithms: Collections A number of useful algorithms (and simple but convenient utilities) to process collections are static methods in the class Collections, e.g.: sort reverse min, max shuffle frequency 24 April 2013 OSU CSE 44

JCF Algorithms: Collections A number of useful algorithms (and simple but convenient utilities) to process collections are static methods in the class Collections, e.g.: sort reverse min, max shuffle frequency Notice that the class Collections is different from the interface Collection, and in particular it does not implement that interface! 24 April 2013 OSU CSE 45

JCF Utilities: Arrays A number of useful algorithms (and simple but convenient utilities) to process built-in arrays are static methods in the class Arrays, e.g.: sort fill deepequals deephashcode deeptostring 24 April 2013 OSU CSE 46

OSU CSE vs. JCF Components The OSU CSE components are similar in design to the JCF interfaces and classes Though some differences can be attributed to pedagogical concerns, there are other important technical differences, too! 24 April 2013 OSU CSE 47

Difference #1: Level of Formalism JCF interfaces include only informal Javadoc comments for contracts (rather than using explicit mathematical models and requires/ensures clauses) JCF descriptions and contracts use similar terms, though; e.g., collections may: be ordered or unordered have duplicates or not have duplicates 24 April 2013 OSU CSE 48

Difference #1: Level of Formalism JCF interfaces JCF java.util.set<e>: include only informal Javadoc comments for contracts (rather boolean add(e e) Adds the specified element to this set if it is not already present (optional operation). More formally, adds the than using explicit mathematical models and requires/ensures clauses) specified element e to this set if the set contains no element e2 such that (e==null? e2==null : e.equals(e2)). If this set already contains the element, the call leaves the set unchanged and returns false. In combination with the restriction on constructors, this ensures that sets never contain duplicate elements. JCF descriptions and contracts use similar terms, though; e.g., collections may: The stipulation above does not imply that sets must accept all elements; sets may refuse to add any particular element, including null, and throw an exception, as described in the specification for Collection.add. Individual set implementations should clearly document any restrictions on the elements that they may contain. be ordered or unordered Throws: UnsupportedOperationException - if the add operation is not supported by this set ClassCastException - if the class of the specified element prevents it from being added to this set NullPointerException have duplicates - if the specified element or is not null and this have set does duplicates not permit null elements IllegalArgumentException - if some property of the specified element prevents it from being added to this set 24 April 2013 OSU CSE 49

Difference #1: Level of Formalism JCF interfaces OSU CSE components.set.set<t>: include only informal void Javadoc add(t comments x) for contracts (rather than Adds x using to this. explicit mathematical models Aliases: and requires/ensures clauses) reference x Updates: this Requires: x is be not ordered in this or unordered Ensures: have duplicates or not have duplicates this = #this union {x} JCF descriptions and contracts use similar terms, though; e.g., collections may: 24 April 2013 OSU CSE 50

Difference #1: Level of Formalism JCF interfaces include only informal Javadoc comments for contracts (rather boolean than using add(t explicit x) mathematical models and requires/ensures clauses) Hypothetical OSU CSE components.set.set<t>: Can you write a formal contract for the add method as it is designed in java.util.set? JCF descriptions and contracts use similar terms, though; e.g., collections may: be ordered or unordered have duplicates or not have duplicates 24 April 2013 OSU CSE 51

Difference #1: Level of Formalism JCF interfaces include only informal Javadoc comments for contracts (rather than using explicit mathematical models and requires/ensures clauses) JCF descriptions Warning about and the JCF contracts documentation: use similar terms, The interface/class though; e.g., collections summary at the may: top of the Javadoc-generated page sometimes contains be ordered or unordered information that is missing from, or even apparently contradictory have duplicates to, the or method not have descriptions; duplicates e.g.: iterator for SortedSet a few methods for PriorityQueue 24 April 2013 OSU CSE 52

Difference #2: Parameter Modes JCF interfaces do not have any notion of parameter modes (rather than using them in contracts to help clarify and simplify behavioral descriptions) If the JCF used parameter modes, though, the default mode also would be restores, as with the OSU CSE components 24 April 2013 OSU CSE 53

Difference #3: Aliasing JCF interfaces almost never explicitly mention aliasing (rather than advertising aliasing when it may arise) JCF components also are not designed to try to avoid aliasing whenever possible, as the OSU CSE components are 24 April 2013 OSU CSE 54

Difference #4: Null JCF interfaces generally permit null references to be stored in collections (rather than having a blanket prohibition against null references) JCF components do, however, sometimes include warnings against null references, which the OSU components always prohibit 24 April 2013 OSU CSE 55

Difference #5: Optional Methods JCF interfaces generally have optional methods (rather than requiring all methods to behave according to their specifications in all implementations) JCF implementations of the same interface are therefore not plug-compatible: optional methods have bodies, but calling one might simply throw an exception: UnsupportedOperationException 24 April 2013 OSU CSE 56

Difference #6: Copy Constructors By convention, every class in the JCF has two standard constructors: A default constructor A conversion constructor that copies references to the elements of its argument, which is another JCF collection 24 April 2013 OSU CSE 57

Difference #6: Copy Constructors By convention, every class in the JCF has two standard constructors: A default constructor A conversion constructor that copies references to the elements of its argument, which is another JCF collection This no-argument constructor creates an empty collection. 24 April 2013 OSU CSE 58

Difference #6: Copy Constructors By convention, every class in the JCF has two standard constructors: A default constructor A conversion constructor that copies references to the elements of its argument, which is another JCF collection Presumably, copying from a collection that may have duplicates, to one that may not, simply removes extra copies. 24 April 2013 OSU CSE 59

Difference #7: Exceptions Violation of what might have been considered a precondition leads to a specific exception being thrown (rather than simply a conceptual contract violation, which might or might not be checked using assert) Example: an attempt to remove an element from an empty Queue is specified to result in a NoSuchElementException 24 April 2013 OSU CSE 60

Difference #8: Kernel Methods A single JCF interface usually contains all methods applicable to a type (rather than kernel methods being separated into a separate interface from all other methods) JCF uses abstract classes, however, to provide default implementations of methods that presumably would be implemented in abstract classes in the OSU CSE components Other JCF methods are like kernel methods 24 April 2013 OSU CSE 61

Resources The Collections Framework (from Oracle) http://docs.oracle.com/javase/7/docs/technotes/guides/collections/ index.html Effective Java, Second Edition http://proquest.safaribooksonline.com.proxy.lib.ohio-state.edu/book/ programming/java/9780137150021 24 April 2013 OSU CSE 62