The Java Collections Framework. Chapters 7.5

Similar documents
Lecture 4. The Java Collections Framework

EECS 2011 M: Fundamentals of Data Structures

CISC 3115 TY3. C24a: Lists. Hui Chen Department of Computer & Information Science CUNY Brooklyn College. 11/15/2018 CUNY Brooklyn College

Iterators and Sequences

Lists and Iterators. CSSE 221 Fundamentals of Software Development Honors Rose-Hulman Institute of Technology

References and Homework ABSTRACT DATA TYPES; LISTS & TREES. Abstract Data Type (ADT) 9/24/14. ADT example: Set (bunch of different values)

Data structure is an organization of information, usually in memory, for better algorithm efficiency.

Generics. IRS W-9 Form

COMP 250. Lecture 8. stack. Sept. 25, 2017

ITI Introduction to Computing II

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

An Introduction to Data Structures

What is the Java Collections Framework?

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

Lecture 6 Collections

Data Structure: Lists and Iterators. Instructor: Prof. Young-guk Ha Dept. of Computer Science & Engineering

CS/CE 2336 Computer Science II

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

JAVA.UTIL.LINKEDLIST CLASS

CH7. LIST AND ITERATOR ADTS

Announcements/Follow-ups

Day 6. COMP1006/1406 Summer M. Jason Hinek Carleton University

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

Class 26: Linked Lists

182 review 1. Course Goals

Basic Data Structures 1 / 24

Notes on access restrictions

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

CH7. LIST AND ITERATOR ADTS

Basic Data Structures

CS 231 Data Structures and Algorithms Fall DDL & Queue Lecture 20 October 22, Prof. Zadia Codabux

Implementing Lists, Stacks, Queues, and Priority Queues

Lists. The List ADT. Reading: Textbook Sections

Collections and Iterators. Collections

Generics Collection Framework

Java Collections Framework: Interfaces

Class 32: The Java Collections Framework

infix expressions (review)

CS Ananda Gunawardena

Taking Stock. IE170: Algorithms in Systems Engineering: Lecture 7. (A subset of) the Collections Interface. The Java Collections Interfaces

Abstract Data Types Spring 2018 Exam Prep 5: February 12, 2018

Lecture 6. COMP1006/1406 (the OOP course) Summer M. Jason Hinek Carleton University

9/16/2010 CS Ananda Gunawardena

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

Abstract vs concrete data structures HEAPS AND PRIORITY QUEUES. Abstract vs concrete data structures. Concrete Data Types. Concrete data structures

엄현상 (Eom, Hyeonsang) School of Computer Science and Engineering Seoul National University

CONTAİNERS COLLECTİONS

Doubly LinkedList is Symmetrical! LinkedList Efficiency. Monday, April 8, 13. insert insert remove remove remove walk

Collections (Java) Collections Framework

Data Structures and Algorithms

Data Abstraction and Specification of ADTs

Active Learning: Streams

Outline. iterator review iterator implementation the Java foreach statement testing

(f) Given what we know about linked lists and arrays, when would we choose to use one data structure over the other?

package weiss.util; // Fig , pg // Fig 6.16,6.17, pg package weiss.util;

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

CS S-05 Abstract Data Types and Lists 1

The Java Collections Framework and Lists in Java Parts 1 & 2

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

1/22/13. Queue? CS 200 Algorithms and Data Structures. Implementing Queue Comparison implementations. Photo by David Jump 9. Colorado State University

Abstract Data Types. Data Str. Client Prog. Add. Rem. Find. Show. 01/22/04 Lecture 4 1

1/22/13. Queue. Create an empty queue Determine whether a queue is empty Add a new item to the queue

CH ALGORITHM ANALYSIS CH6. STACKS, QUEUES, AND DEQUES

CSC 321: Data Structures. Fall 2013

(8 1) Container Classes & Class Templates D & D Chapter 18. Instructor - Andrew S. O Fallon CptS 122 (October 8, 2018) Washington State University

COMP 250 Winter generic types, doubly linked lists Jan. 28, 2016

COURSE 4 PROGRAMMING III OOP. JAVA LANGUAGE

Java Collection Framework

Queue? Part 4. Queues. Photo by David Jump. Create an empty queue Items leave a queue from its front.

CSC212:Data Structure

CS2113 Lab: Collections 10/29/2018

Announcements. Prelude (2) Prelude (1) Data Structures and Information Systems Part 1: Data Structures. Lecture 6: Lists.

List... NOTE We use List as illustrative example of collections Study the others from textbook!

EC8393FUNDAMENTALS OF DATA STRUCTURES IN C Unit 3

COS 226 Algorithms and Data Structures Fall Midterm

CSCI 136 Data Structures & Advanced Programming. Lecture 13 Fall 2018 Instructors: Bill 2

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

Recap. List Types. List Functionality. ListIterator. Adapter Design Pattern. Department of Computer Science 1

Computer Science II (Spring )

Lists. Outline. COMP9024: Data Structures and Algorithms. Lists. Array List ADT. Array-Based Implementation. Array lists Node lists Iterators

CS 221 Review. Mason Vail

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

What is an Iterator? An iterator is an abstract data type that allows us to iterate through the elements of a collection one by one

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

Functors. 01/23/03 Lecture 5 1

ArrayList. Introduction. java.util.arraylist

COMP 250. Lecture 6. doubly linked lists. Sept. 20/21, 2017

Frameworks. CS151 Chris Pollett Oct. 26, 2005.

CS313D: ADVANCED PROGRAMMING LANGUAGE

Generic Collections CSC Spring 2019 Howard Rosenthal

DM550 Introduction to Programming part 2. Jan Baumbach.

9/26/2018 Data Structure & Algorithm. Assignment04: 3 parts Quiz: recursion, insertionsort, trees Basic concept: Linked-List Priority queues Heaps

CSE 131 Computer Science 1 Module 9a: ADT Representations. Stack and queue ADTs array implementations Buffer ADT and circular lists

Cpt S 122 Data Structures. Course Review FINAL. Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University

CSC 321: Data Structures. Fall 2012

CS 302 ALGORITHMS AND DATA STRUCTURES

CISC 323 Intro to Software Engineering

Summer Final Exam Review Session August 5, 2009

11/2/ Dynamic Data Structures & Generics. Objectives. Array-Based Data Structures: Outline. Harald Gall, Prof. Dr.

Queues. Data Structures and Design with Java and JUnit Rick Mercer 18-1

Transcription:

The Java s Framework Chapters 7.5

Outline Introduction to the Java s Framework Iterators Interfaces, Classes and Classes of the Java s Framework

Outline Introduction to the Java s Framework Iterators Interfaces, Classes and Classes of the Java s Framework

The Java s Framework We will consider the Java s Framework as a good example of how to apply the principles of objectoriented software engineering (see Lecture 1) to the design of classical data structures.

The Java s Framework A coupled set of classes and interfaces that implement commonly reusable collection data structures. Designed and developed primarily by Joshua Bloch (currently Chief Java Architect at Google).

What is a? An object that groups multiple elements into a single unit. Sometimes called a container.

What is a Framework? A unified architecture for representing and manipulating collections. Includes: Interfaces: A hierarchy of ADTs. Implementations Algorithms: The methods that perform useful computations, such as searching and sorting, on objects that implement collection interfaces. These algorithms are polymorphic: that is, the same method can be used on many different implementations of the appropriate collection interface.

History Apart from the Java s Framework, the bestknown examples of collections frameworks are the C++ Standard Template Library (STL) and Smalltalk's collection hierarchy.

Benefits Reduces programming effort: By providing useful data structures and algorithms, the s Framework frees you to concentrate on the important parts of your program rather than on the low-level "plumbing" required to make it work. Increases program speed and quality: Provides highperformance, high-quality implementations of useful data structures and algorithms. Allows interoperability among unrelated APIs: APIs can interoperate seamlessly, even though they were written independently. Reduces effort to learn and to use new APIs Reduces effort to design new APIs Fosters software reuse: New data structures that conform to the standard collection interfaces are by nature reusable.

Where is the Java s Framework? Package java.util. In this lecture we will survey the interfaces, abstract classes and classes for linear data structures provided by the Java s Framework. We will not cover all of the details (e.g., the exceptions that may be thrown). For additional details, please see Javadoc, provided with your java distribution. Comments and code in the specific java.util.*.java files, provided with your java distribution. The s Java tutorial, available at http://docs.oracle.com/javase/tutorial/collections/index.html Chan et al, The Java Class Libraries, Second Edition

Core Interfaces

Outline Introduction to the Java s Framework Iterators Interfaces, Classes and Classes of the Java s Framework

Traversing s in Java There are two ways to traverse collections: using Iterators. with the (enhanced) for-each construct

Iterators An Iterator is an object that enables you to traverse through a collection and to remove elements from the collection selectively, if desired. You get an Iterator for a collection by calling the collection s iterator method. Suppose collection is an instance of a. Then to print out each element on a separate line: Iterator<E> it = collection.iterator(); while (it.hasnext()) System.out.println(it.next()); Note that next() does two things: 1. Returns the current element (initially the first element) 2. Steps to the next element and makes it the current element.

Iterators Iterator interface: public interface Iterator<E> { boolean hasnext(); E next(); void remove(); //optional } hasnext() returns true if the iteration has more elements next() returns the next element in the iteration. throws exception if iterator has already visited all elements. remove() removes the last element that was returned by next. remove may be called only once per call to next otherwise throws an exception. Iterator.remove is the only safe way to modify a collection during iteration

Implementing Iterators Could make a copy of the collection. Good: could make copy private no other objects could change it from under you. Bad: construction is O(n). Could use the collection itself (the typical choice). Good: construction, hasnext and next are all O(1). Bad: if another object makes a structural change to the collection, the results are unspecified.

The Enhanced For-Each Statement Suppose collection is an instance of a. Then for (Object o : collection) System.out.println(o); prints each element of the collection on a separate line. This code is just shorthand: it compiles to use o.iterator().

The Generality of Iterators Note that iterators are general in that they apply to any collection. Could represent a sequence, set or map. Could be implemented using arrays or linked lists.

Iterators A Iterator extends Iterator to treat the collection as a list, allowing access to the integer position (index) of elements Iterator forward and backward traversal modification and insertion of elements. Iterator The current position is viewed as being either Before the first element Between two elements After the last element

Iterators Iterator Iterators support the following methods: Iterator add(e): inserts element e at current position (before implicit cursor) hasnext() hasprevious() previous(): returns element before current position and steps backward next(): returns element after current position and steps forward nextindex() previousindex() set(e): replaces the element returned by the most recent next() or previous() call remove(): removes the element returned by the most recent next() or previous() call

Outline Introduction to the Java s Framework Iterators Interfaces, Classes and Classes of the Java s Framework

Levels of ion Recall that Java supports three levels of abstraction: Interface Java expression of an ADT Includes method declarations with arguments of specified types, but with empty bodies Class Implements only a subset of an interface. Cannot be used to instantiate an object. (Concrete) Classes May extend one or more abstract classes Must fully implement any interface it implements Can be used to instantiate objects.

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Iterable Interface Allows an Iterator to be associated with an object. The iterator allows an existing data structure to be stepped through sequentially, using the following methods: hasnext() returns true if the iteration has more elements next() returns the next element in the iteration. throws exception if iterator has already visited all elements. remove() removes the last element that was returned by next. remove may be called only once per call to next otherwise throws an exception. Iterator.remove is the only safe way to modify a collection during iteration

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Interface Allows data to be modeled as a collection of objects. In addition to the Iterator interface, provides interfaces for: Creating the data structure add(e) addall(c) Querying the data structure size() isempty() contains(e) containsall(c) toarray() equals(e) Modifying the data structure remove(e) removeall(c) retainall(c) clear()

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Class Skeletal implementation of the interface. For unmodifiable collection, programmer still needs to implement: iterator (including hasnext and next methods) size For modifiable collection, need to also implement: remove method for iterator add

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Interface Extends the s interface to model the data as an ordered sequence of elements, indexed by a 0-based integer index (position). Provides interface for creation of a Iterator Also adds interfaces for: Creating the data structure add(e) append element e to the list add(i, e) insert element e at position i (and shift elements at i and above one to the right). Querying the data structure get(i) return element currently stored at position i indexof(e) return index of first occurrence of specified element e lastindexof(e) return index of last occurrence of specified element e sub(i1, i2) return list of elements from index i1 to i2 Modifying the data structure set(i, e) replace element currently stored at index i with specified element e remove(e) remove the first occurrence of the specified element from the list remove(i) remove the element at position i

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Class Skeletal implementation of the interface. For unmodifiable list, programmer needs to implement methods: get size For modifiable list, need to implement set For variable-size modifiable list, need to implement add remove

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Array Class Random access data store implementation of the interface Uses an array for storage. Supports automatic array-resizing Adds methods trimtosize() Trims capacity to current size ensurecapacity(n) Increases capacity to at least n clone() Create copy of list removerange(i1, i2) Remove elements at positions i1 to i2 RangeCheck(i): throws exception if i not in range writeobject(s): writes out list to output stream s readobject(s): reads in list from input stream s

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

Similar to Array. The Vector Class But all methods of Vector are synchronized. Uses an internal lock to prevent multiple threads from concurrently executing methods for the same vector object. Other threads trying to execute methods of the object are suspended until the current thread completes. Helps to prevent conflicts and inconsistencies in multi-threaded code Vector is a so-called legacy class: no longer necessary for new applications, but still in widespread use in existing code. Synchronization can be achieved with Arrays and other classes of the s framework using synchronization wrappers (we will not cover this).

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Stack Class Represents a last-in, first-out (LIFO) stack of objects. Adds 5 methods: push() pop() peek() empty() search(e): return the 1-based position of where an object is on the stack.

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Sequential Class Skeletal implementation of the interface. Assumes a sequential access data store (e.g., linked list) Programmer needs to implement methods listiterator() size() For unmodifiable list, programmer needs to implement list iterator s methods: hasnext() next() hasprevious() previous() nextindex() previousindex() For modifiable list, need to also implement list iterator s set(e) For variable-size modifiable list, need to implement list iterator s add(e) remove()

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Interface Designed for holding elements prior to processing Typically first-in first-out (FIFO) Defines a head position, which is the next element to be removed. Provides additional insertion, extraction and inspection operations. Extends the interface to provide interfaces for: offer(e): add e to queue if there is room (return false if not) poll(): return and remove head of queue (return null if empty) remove(): return and remove head of queue (throw exception if empty) peek(): return head of queue (return null if empty) element(): return head of queue (throw exception if empty)

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Linked Class Implements the and interfaces. Uses a doubly-linked list data structure. Extends the interface with additional methods: getfirst() getlast() removefirst() removelast() addfirst(e) addlast(e) These make it easier to use the Linked class to create stacks, queues and deques (double-ended queues).

The Linked Class Linked objects are not synchronized by default. However, the Linked iterator is fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the Iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException. This is detected at the first execution of one of the iterator s methods after the modification. In this way the iterator will hopefully fail quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Class Skeletal implementation of the interface. Provides implementations for add(e) remove() element() clear() addall(c)

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

The Priority Class Based on priority heap Elements are prioritized based either on natural order a comparator, passed to the constructor. Provides an iterator We will study this in detail when we get to heaps!

The Java s Framework (Ordered Data Types) Interface Class Class Iterable Priority Sequential Array Vector Stack Linked

Summary From this lecture you should understand: The purpose and advantages of the Java s Framework How interfaces, abstract classes and classes are used hierarchically to achieve some of the key goals of object-oriented software engineering. The purpose of iterators, and how to create and use them. How the Java s Framework can be used to develop code using general collections, lists, array lists, stacks and queues.

For More Details Javadoc, provided with your java distribution. Comments and code in the specific java.util.*.java files, provided with your java distribution. The s Java tutorial, available at http://docs.oracle.com/javase/tutorial/collections/index.html Chan et al, The Java Class Libraries, Second Edition