The List ADT Reading: Textbook Sections 3.1 – 3.5

Slides:



Advertisements
Similar presentations
Chapter 22 Implementing lists: linked implementations.
Advertisements

The List ADT Textbook Sections
Chapter 6 The Collections API. Simple Container/ Iterator Simple Container Shape [] v = new Shape[10]; Simple Iterator For( int i=0 ; i< v.length ; i++)
CSC 205 – Java Programming II Lecture 25 March 8, 2002.
CSE 143 Lecture 22: Advanced List Implementation (ADTs; interfaces; abstract classes; inner classes; generics; iterators)
15-Jun-15 Lists in Java Part of the Collections Framework.
Unit 291 Java Collections Framework: Interfaces Introduction to the Java Collections Framework (JCF) The Comparator Interface Revisited The Collection.
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.
1 Collection, Iterable, and Iterator Interfaces The Collection Interface and its Hierarchy The Iterable and Iterator Interfaces For-each Loops with Iterable.
Linked Lists. RHS – SOC 2 Linked lists We can already store collec- tions of objects in arrays and array lists – why would we need other data structures…?
LinkedList Many slides from Horstmann modified by Dr V.
CMSC 341 Linked Lists, Stacks and Queues. 8/3/2007 UMBC CMSC 341 LSQ 2 Implementing Your Own Linked List To create a doubly linked list as seen below.
Collections in Java. 2 Collections Hierarchy > ArrayListVector Stack LinkedList > Arrays Collections.
Linked Lists Ellen Walker CPSC 201 Data Structures Hiram College.
ArrayList Class An ArrayList is an object that contains a sequence of elements that are ordered by position. An ArrayList is an object that contains a.
CSE 143 Lecture 24 Advanced collection classes (ADTs; abstract classes; inner classes; generics; iterators) read 11.1, 9.6, , slides.
1 CMPSCI 187 Computer Science 187 Introduction to Introduction to Programming with Data Structures Lecture 8 Lists, Iterators, and Doubly Linked Lists.
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.
Topic 13 Iterators. 9-2 Motivation We often want to access every item in a data structure or collection in turn We call this traversing or iterating over.
Data Structures I Collection, List, ArrayList, LinkedList, Iterator, ListNode.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 18 List ADT Animated Version.
1 CMPSCI 187 Computer Science 187 Introduction to Introduction to Programming with Data Structures Lecture 9 Doubly Linked Lists and Ordered Lists Lecture.
1 CS162: Introduction to Computer Science II Abstract Data Types.
Lists and the Collection Interface Chapter 4. Chapter 4: Lists and the Collection Interface2 Chapter Objectives To become familiar with the List interface.
1 Chapter 24 Implementing Lists, Stacks, Queues, and Priority Queues Jung Soo (Sue) Lim Cal State LA.
An Array-Based Implementation of the ADT List
Iterators.
CSE 143 Lecture 14 Interfaces; Abstract Data Types (ADTs)
CSE 373 Implementing a Stack/Queue as a Linked List
The List ADT Reading: Textbook Sections 3.1 – 3.5
Marcus Biel, Software Craftsman
4. Linked Lists.
Linked Lists Chapter 5 (continued)
John Hurley Cal State LA
Fundamentals of Java: AP Computer Science Essentials, 4th Edition
Sequences and Iterators
Data Structures Lakshmish Ramaswamy.
Announcements & Review
COP 3503 FALL 2012 Shayan Javed Lecture 8
Implementing ArrayList Part 1
Top Ten Words that Almost Rhyme with “Peas”
Linked Lists.
Linked Lists, Stacks and Queues Textbook Sections
Programming in Java Lecture 11: ArrayList
Data Type (how to view it)
(Java Collections Framework) AbstractSequentialList
CSE 143 Lecture 27: Advanced List Implementation
Lecture 26: Advanced List Implementation
Programming II (CS300) Chapter 07: Linked Lists and Iterators
Chapter 24 Implementing Lists, Stacks, Queues, and Priority Queues
Doubly Linked List Implementation
Computer Science and Engineering
Collections Framework
Lists - I The List ADT.
Lists - I The List ADT.
JCF Collection classes and interfaces
Programming II (CS300) Chapter 02: Using Objects Java ArrayList Class
List Implementation via Arrays
Linked Lists Chapter 5 (continued)
Programming II (CS300) Chapter 07: Linked Lists
TCSS 143, Autumn 2004 Lecture Notes
Part of the Collections Framework
CSE 143 Lecture 21 Advanced List Implementation
Doubly Linked List Implementation
Linked Lists Chapter 5 (continued)
Java Generics & Iterators
Presentation transcript:

The List ADT Reading: Textbook Sections 3.1 – 3.5 Lists The List ADT Reading: Textbook Sections 3.1 – 3.5

List ADT A list is a dynamic ordered tuple of homogeneous elements Ao, A1, A2, …, AN-1 where Ai is the i-th element of the list The position of element Ai is i; positions range from 0 to N-1 inclusive The size of a list is N ( a list with no elements is called an “empty list”) dynamic means the list can change over time homogeneous means the elements are all of the same type ordered means that A1+1 follows (or succeeds) Ai and Ai-1 precedes Ai CMSC 341 Lists1

Generic Operations on a List create an empty list printList() – prints all elements in the list construct a (deep) copy of a list find(x) – returns the position of the first occurrence of x remove(x) – removes x from the list if present insert(x, position) – inserts x into the list at the specified position isEmpty( ) – returns true if the list has no elements makeEmpty( ) – removes all elements from the list findKth(int k) – returns the element in the specified position The implementations of these operations in a class may have different names than the generic names above CMSC 341 Lists1

Simple Array Implementation of a List Use an array to store the elements of the list Complexity for printList: findkth,get and set: Also, arrays have a fixed capacity, but can fix with implementation. int arr[] = new int arr[10]; int newArr[] = new int[arr.length *2]; for(int i = 0; i < arr.length; i++) newArr[i] = arr[i]; arr = newArr; CMSC 341 Lists1

Deletion Linked List Deletion A1 -> next =A2-> next; CMSC 341 Lists1

Insertion Insertion Notice insert and delete can be constant time if node is inserted at beginning of List; however, findkth is now O(i). CMSC 341 Lists1

The List ADT in Java Collections The List ADT is one of the data structures implemented in the Java Collections API. A list is abstracted using an inheritance hierarchy that stems from the Collection<E> interface , List<E>Interface in the java.util package and from the Iterable<E> interface in the java.lang package. The combination of these interfaces provides a uniform public interface for all Lists in Java CMSC 341 Lists1

Methods from the Collections List ADT //from Collection interface int size( ); boolean isEmpty( ); void clear( ); boolean contains( AnyType x ); boolean add( AnyType x ); boolean remove( AnyType x ); java.util.Iterator<AnyType> iterator( ); //from List interface AnyType get( int idx ); AnyType set( int idx, AnyType newVal ); void add( int idx, AnyType x ); void remove( int idx ); ListIterator<AnyType> listIterator(int pos); CMSC 341 Lists1

The Iterator<E> Interface The Collections framework provides two very useful interfaces for traversing a Collection. The first is the Iterator<E> interface. When the iterator method is called on a Collection, it returns an Iterator object which has the following methods for traversing the Collection. boolean hasNext( ); AnyType next( ); void remove( ); CMSC 341 Lists1

Using an Iterator to Traverse a Collection public static <AnyType> void print( Collection<AnyType> coll ) { Iterator<AnyType> itr = coll.iterator( ); while( itr.hasNext( ) ){ AnyType item = itr.next( ); System.out.println( item ); } CMSC 341 Lists1

The Enhanced for Loop The enhanced for loop in Java actually calls the iterator method when traversing a Collection and uses the Iterator to traverse the Collection when translated into byte code. public static <AnyType> void print( Collection<AnyType> coll ) { for( AnyType item : coll ) System.out.println( item ); } This code is actually changed into the code on the previous slide when it is compiled to byte code. CMSC 341 Lists1

The ListIterator<E> Interface The second interface for traversing a Collection is the ListIterator<E> interface. It allows for the bidirectional traversal of a List. boolean hasPrevious( ); AnyType previous( ); void add( AnyType x ); void set( AnyType newVal ); A ListIterator object is returned by invoking the listIterator method on a List. CMSC 341 Lists1

Concrete Implementations of the List ADT in the Java Collections API Two concrete implementations of the List API in the Java Collections API with which you are already familiar are: java.util.ArrayList java.util.LinkedList Let’s examine the methods of these concrete classes that were developed at Sun. CMSC 341 Lists1

List Operations on an ArrayList<E> Supports constant time for insertion at the “end” of the list using void add(E element) deletion from the “end” of the list using E remove(int index) access to any element of the list using E get(int index) changing value of any element of the list using E set(int index, E element) CMSC 341 Lists1

List Operations on an ArrayList<E> (cont.) What is the growth rate for the following? insertion at the “beginning” of the list using void add(int index, E element) O(N) Insertion at the “end” of the list O(C) deletion from the “beginning” of the list using E remove(int index) Deletion from the “end” of the list CMSC 341 Lists1

List Operations on a LinkedList<E> Provides doubly linked list implementation CMSC 341 Lists1

List Operations on a LinkedList<E> Supports constant time for insertion at the “beginning” of the list using void addFirst(E o) insertion at the “end” of the list using void addLast(E o) deletion from the “beginning” of the list using E removeFirst() deletion from the “end” of the list using E removeLast() Accessing first element of the list using E getFirst() E getLast() CMSC 341 Lists1

List Operations on a LinkedList<E> What is the running time for the following? access to the “middle” element of the list using E get(int index) LinkedList: O(N) ArrayList: O(1) CMSC 341 Lists1

Example 1 –ArrayList vs. LinkedList What is the average running time for an ArrayList versus a LinkedList? public static void makeList1(List<Integer> list, int N) { list.clear(); for(int i = 0; i < N; i++) list.add(i); } ArrayList:O(N); LinkedList: O(N) O(N) for both CMSC 341 Lists1

Example 2 –ArrayList vs. LinkedList What is the average running time for an ArrayList versus a LinkedList? public static void makeList2(List<Integer> list, int N) { list.clear(); for(int i = 0; i < N; i++) list.add(0,i); } ArrayList: O(N^2); LinkedList: O(N) O(n) for LinkedList but O(n^2) for ArrayList CMSC 341 Lists1

Example 3 –ArrayList vs. LinkedList What is the running time for an ArrayList versus a LinkedList? public static int sum(List<Integer> list, int N) { int total = 0; for(int i = 0; i < N ; i++) total += list.get(i); return total; } ArrayList: O(N), LinkedList: O(N^2) How can we change this code so the running time for both is the same?: use iterator in LinkedList. O(n) for ArrayList but O(n^2) for LinkedList Use the enhanced for loop CMSC 341 Lists1

Example 4 –ArrayList vs. LinkedList What is the running time for an ArrayList versus a LinkedList? public static void removeEvensVer3(List<Integer> lst ) { Iterator<Integer> itr = lst.iterator( ); while( itr.hasNext( ) ) if( itr.next( ) % 2 == 0 ) itr.remove( ); } ArrayList: O(N^2): LinkedList: O(N) Removes even numbers in a list. O(n^2) for ArrayList but O(n) for LinkedList CMSC 341 Lists1

Implementing Your Own ArrayList What do you need? Store elements in a parameterized array Track number of elements in array (size) and capacity of array public class MyArrayList<AnyType> implements Iterable<AnyType> { private static final int DEFAULT_CAPACITY=10; private int theSize; private AnyType [ ] theItems; CMSC 341 Lists1

3. Ability to change capacity of the array public void ensureCapacity( int newCapacity ) { if( newCapacity < theSize ) return; AnyType [ ] old = theItems; theItems = (AnyType []) new Object[ newCapacity]; for( int i = 0; i < size( ); i++ ) theItems[ i ] = old[ i ]; } CMSC 341 Lists1

4. get and set Methods public AnyType get( int idx ) { if( idx < 0 || idx >= size( ) ) throw new ArrayIndexOutOfBoundsException(); return theItems[ idx ]; } public AnyType set( int idx, AnyType newVal ) throw new ArrayIndexOutOfBoundsException( ); AnyType old = theItems[ idx ]; theItems[ idx ] = newVal; return old; CMSC 341 Lists1

5. size, isEmpty, and clear Methods public void clear( ){ theSize = 0; ensureCapacity( DEFAULT_CAPACITY ); } public int size( ){ return theSize; public boolean isEmpty( ){ return size( ) == 0; // constructor invokes the clear method public MyArrayList( ){ clear( ); CMSC 341 Lists1

6. add Methods public boolean add( AnyType x ){ add( size( ), x ); /** Add to the end of the list */ public boolean add( AnyType x ){ add( size( ), x ); return true; } public void add( int idx, AnyType x ){ if( theItems.length == size( ) ) ensureCapacity( size( ) * 2 + 1 ); for( int i = theSize; i > idx; i-- ) theItems[ i ] = theItems[ i - 1 ]; theItems[ idx ] = x; theSize++; /** Add item x to the index of idx in the list */ CMSC 341 Lists1

7. remove and iterator Method /** Remove by index */ public AnyType remove( int idx ){ AnyType removedItem = theItems[ idx ]; for( int i = idx; i < size( ) - 1; i++ ) theItems[ i ] = theItems[ i + 1 ]; theSize--; return removedItem; } /**required by Iterable<E> interface */ public java.util.Iterator<AnyType> iterator( ){ return new ArrayListIterator( ); CMSC 341 Lists1

8. Iterator class // private inner class for iterator private class ArrayListIterator implements java.util.Iterator<AnyType> { private int current = 0; public boolean hasNext( ) { return current < size( ); } public AnyType next( ) { return theItems[ current++ ]; } public void remove( ) { MyArrayList.this.remove( --current ); } } Implicit reference to outer class method Implicit ref. to outer class data Explicit reference to outer class method CMSC 341 Lists1

The Iterator and Java Inner classes The implementation of the Iterator class required an inner class to allow one or more instances of Iterator for one outer class. CMSC 341 Lists1

Sorted Lists Suppose we decided that the data in the lists should be stored in sorted order. What List code would need to be changed? How would sorting the data affect the performance of Finding an element in the list: yes: best O(lgn) Inserting an element into the list: yes new: O(n); old: O(1) Removing an element from the list: yes; depends on the find() other List functions CMSC 341 Lists1

private String someString = “this belongs to the outerClass”; class OuterClass { private String someString = “this belongs to the outerClass”; class InnerClass { private String someString2 = “this belongs to the innerClass”; public doSomethingHere { System.println(someString2); } Class MyTest { main () OuterClass myOC; // will this compile? - yes InnerClass myIC: // will this compile? - no OuterClass.InnerClass myIC2; // yes this works. myIC2.doSomethingHere(); CMSC 341 Lists