Chapter 101 Dynamic Data Structures and Generics Chapter 10.

Slides:



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

Chapter 24 Lists, Stacks, and Queues
Lists and the Collection Interface Chapter 4. Chapter Objectives To become familiar with the List interface To understand how to write an array-based.
Generics and the ArrayList Class
Stacks, Queues, and Deques. 2 A stack is a last in, first out (LIFO) data structure Items are removed from a stack in the reverse order from the way they.
Arrays Chapter 6. Outline Array Basics Arrays in Classes and Methods Sorting Arrays Multidimensional Arrays.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved L11 (Chapter 20) Lists, Stacks,
CS102--Object Oriented Programming Lecture 17: – Linked Lists Copyright © 2008 Xiaoyan Li.
Slides prepared by Rose Williams, Binghamton University Chapter 14 Generics and the ArrayList Class.
Chapter 101 Dynamic Data Structures and Generics Chapter 10.
Using ArrayList. Lecture Objectives To understand the foundations behind the ArrayList class Explore some of the methods of the ArrayList class.
Lists and the Collection Interface Chapter 4. Chapter 4: Lists and the Collection Interface2 Chapter Objectives To become familiar with the List interface.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 13 Pointers and Linked Lists.
Slides prepared by Rose Williams, Binghamton University Chapter 14 Generics and the ArrayList Class.
Chapter 14 Generics and the ArrayList Class Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Fall 2007CS 2251 Lists and the Collection Interface Chapter 4.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Announcements/Reminders l Project 6 due on Thursday March 31 l Exam.
Chapter 101 Dynamic Data Structures and Generics Chapter 10.
Stacks, Queues, and Deques. A stack is a last in, first out (LIFO) data structure –Items are removed from a stack in the reverse order from the way they.
Stacks, Queues, and Deques
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Data Structures Using C++ 2E
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Custom Templatized Data Structures.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 13 Pointers and Linked Lists.
Copyright © 2012 Pearson Addison-Wesley. All rights reserved. Chapter 13 Pointers and Linked Lists.
ArrayList, Multidimensional Arrays
1 © 2002, Cisco Systems, Inc. All rights reserved. Arrays Chapter 7.
Chapter 18 Java Collections Framework
Constructors CMSC 202. Object Creation Objects are created by using the operator new in statements such as… The following expression invokes a special.
Chapter 14 Generics and the ArrayList Class Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights.
Data structures Abstract data types Java classes for Data structures and ADTs.
Slides prepared by Rose Williams, Binghamton University Chapter 15 Linked Data Structures.
Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.
More About Objects and Methods Chapter 5. Outline Programming with Methods Static Methods and Static Variables Designing Methods Overloading Constructors.
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.
Dynamic Data Structures and Generics Chapter 10. Outline Vectors Linked Data Structures Introduction to Generics.
Aug 9, CMSC 202 ArrayList. Aug 9, What’s an Array List ArrayList is  a class in the standard Java libraries that can hold any type of object.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Slide 1 Linked Data Structures. Slide 2 Learning Objectives  Nodes and Linked Lists  Creating, searching  Linked List Applications  Stacks, queues.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Comp 249 Programming Methodology Chapter 15 Linked Data Structure – Part A Dr. Aiman Hanna Department of Computer Science & Software Engineering Concordia.
Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-1 l Vectors l Linked Data Structures Dynamic Data Structures.
CSS446 Spring 2014 Nan Wang.  To understand the implementation of linked lists and array lists  To analyze the efficiency of fundamental operations.
Winter 2006CISC121 - Prof. McLeod1 Stuff Deadline for assn 3 extended to Monday, the 13 th. Please note that the testing class for assn 3 has changed.
Chapter 15 Linked Data Structures Slides prepared by Rose Williams, Binghamton University Kenrick Mock University of Alaska Anchorage Copyright © 2008.
CMSC 202 Arrays 2 nd Lecture. Aug 6, Array Parameters Both array indexed variables and entire arrays can be used as arguments to methods –An indexed.
CMSC 202 Advanced Section Classes and Objects: Object Creation and Constructors.
List Interface and Linked List Mrs. Furman March 25, 2010.
CSE 1201 Object Oriented Programming ArrayList 1.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
Arrays Chapter 6. Objectives learn about arrays and how to use them in Java programs learn how to use array parameters and how to define methods that.
Slides prepared by Rose Williams, Binghamton University Chapter 16 Collections and Iterators.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
Chapter 9 Introduction to Arrays Fundamentals of Java.
Java Generics. Lecture Objectives To understand the objective of generic programming To be able to implement generic classes and methods To know the limitations.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
CMSC 202 ArrayList Aug 9, 2007.
Pointers and Linked Lists
Pointers and Linked Lists
Fundamentals of Java: AP Computer Science Essentials, 4th Edition
Vectors Linked Data Structures
CMSC 202 ArrayList Aug 9, 2007.
Dynamic Data Structures and Generics
Object Oriented Programming in java
CMSC 202 ArrayList Aug 9, 2007.
Dynamic Data Structures and Generics
Comp 249 Programming Methodology
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Chapter 101 Dynamic Data Structures and Generics Chapter 10

2 Objectives become familiar with vectors learn about linked data structures in Java learn how to manipulate linked lists learn to use inner classes in defining linked data structures learn about iterators learn about generics (parameters for types)

Chapter 103 Outline Vectors Linked Data Structures Introduction to Generics (optional) Graphics Supplement

Chapter 104 Introduction A data structure is a construct used to organize data in a specific way. An array is a static data structure. Dynamic data structures can grow and shrink while a program is running. Vectors and linked data structures are dynamic.

Chapter 105 Introduction, cont. Vectors are similar to arrays, but offer more flexibility. The linked list is a simple but useful linked data structure that makes use of inner classes. An inner class is a class definition within another class definition.

Chapter 106 Introduction, cont. Java 5.0 allows definitions with parameters for types. These definitions are known as generics. int[] scores = new int[100]; … scores = new int[200]; Does NOT add 100 new locations to scores! It creates a new array of 200 locations and the old array becomes garbage 

Chapter 107 Vectors: Outline Introduction to Vectors Using Vectors Parameterized Classes and Generics

Chapter 108 Introduction to Vectors We can think of vectors as arrays that grow and shrink while a program is running. At the time an array is created, its length is fixed. –Sometimes an array turns out to be too small for its intended use. –Sometimes an array turns out to be too large for its intended use, but the unused portion of the array is not available for other purposes.

Chapter 109 Introduction to Vectors, cont. Vectors serve the same purposes as arrays, but can change in length while a program is running. This added flexibility comes at a price: –Vectors are less efficient than arrays. –The base type of a vector must be a class type rather than a primitive type. (Automatic boxing and unboxing make this requirement less significant than it used to be.)

Chapter 1010 Using Vectors The definition of class Vector must be imported. import java.util.*; to create and name a vector Vector v = new Vector (20); –The vector v stores objects of class String and has an initial capacity of 20.

Chapter 1011 Using Vectors, cont. –When more capacity is needed, the system allocates more memory automatically. –If the initial capacity was sufficient, the code is more efficient. In this example, the base type is type String. –Any class can be used as the base type. –But, wrapper classes MUST be used for primitive types.

Chapter 1012 Creating and Naming a Vector syntax Vector v1 = new Vector ();// capacity=10, doubles Vector v2 = new Vector (n);// capacity=n, doubles Vector v3 = new Vector (n,p); //capacity=n, increases by p

Chapter 1013 Adding, Getting, and Setting Values to add an element v.addElement(“Hello!”); to get the value of an element String temp = v.elementAt(index); to change the value of an existing element v.setElementAt(“Hi, Mom!”, index);

Chapter 1014 Size and Indices to learn the size of the vector int howMany = v.size(); The indices range from 0 to v.size()-1.

Chapter 1015 Inserting and Removing Values to insert an element v.insertElementAt(“Good-bye”, position); –elements at index position or higher move to index positions greater by one. to remove an element from a position v.removeElementAt(position);

Chapter 1016 Inserting and Removing Values, cont. to remove the first occurrence of an element v.removeElement(“Hello!”); to remove element at index i v.removeElementAt(i); to remove all elements v.removeAllElements();

Chapter 1017 Searching a Vector to learn if an element is in the vector boolean found = v.contains(“Good-bye”); to learn the location of the first occurrence of an element int location = v.indexOf(“Hi, Mom!”); to learn the location of the first occurrence of an element at or after a position int location = v.indexOf(“Hello”, position);

Chapter 1018 Searching a Vector, cont. to learn the location of the last occurrence of an element int location = v.lastIndexOf(“Hi, Mom!”); to learn the value of the first element String first = v.firstElement(); to learn the value of the last element String last = v.lastElement();

Chapter 1019 Size and Capacity to learn if the vector is empty boolean none = v.isEmpty(); to learn the current capacity int howBig = v.capacity(); to make room for more elements v.ensureCapacity(moreElements); to trim to the current size v.trimToSize();

Chapter 1020 Size and Capacity, cont. to set the size v.setSize(howMany);

Chapter 1021 Copying and Determining Equality to make a copy Vector w = v.clone(); to test for equality boolean same = v.equals(w);

Chapter 1022 Vector Demonstration class VectorDemo

Chapter 1023 Vector Demonstration, cont.

Chapter 1024 Using Method clone When used with a vector, the assignment statement creates another reference to the same vector. To make a copy of a vector, use otherV = (Vector )v.clone(); using a correct type cast. On the other hand Vector otherV = v.clone(); //ILLEGAL will produce an error message.

Chapter 1025 Using Method clone, cont. Accessor methods should not return a private instance variable of type Vector. Accessor methods should return a copy of the vector, not the private instance vector itself. Method clone can be used to produce a copy of the private instance vector.

Chapter 1026 Using Method clone, cont. However, the return type of method clone is Object. Hence, the appropriate form is public Vector getVector() { return (Vector )v.clone(); } Any objects stored in the vector also must have appropriate accessor methods.

Chapter 1027 Parameterized Classes and Generics The class Vector is a parameterized class. Its parameter, denoted Base_Type, can be replaced by any class type. Java 5.0 allows definitions, called generic definitions or simply generics, with parameters for types.

Chapter 1028 Newer Collection Classes A new group of classes implement the Collection interface. –These classes are known as collection classes. The Vector definition has been retrofitted to be a collection class.

Chapter 1029 Linked Data Structures: Outline Linked Lists Inner Classes Node Inner Classes Iterators Exception Handling with Linked Lists Variations on a Linked List Other Linked Data Structures

Chapter 1030 Introduction to Linked Data Structures A linked data structure is a collection of objects (called nodes), each containing data and a (potential) reference to (at least) one other node.

Chapter 1031 Linked Lists The predefined LinkedList class is part of the java.util package. Nevertheless, to learn how linked data structures work, we’ll construct a simplified example of a linked list.

Chapter 1032 Linked Lists, cont.

Chapter 1033 Linked Lists, cont. Links, shown as arrows in the previous diagram, are implemented as references and are instance variables of the node type. The reference marked head is a variable of the node type which provides access to the first node in the linked list, but is not itself one of the nodes.

Chapter 1034 Linked Lists, cont. Each node is an object of a class that has (at least) two instance variables: –the data –the link.

Chapter 1035 Linked Lists, cont. class ListNode

Chapter 1036 Detecting the Last Node There must be means for detecting the last node. A link instance variable with the value null indicates the last node. A reference to the linked list with the value null indicates an empty linked list. The value of the link instance variable is tested using ==.

Chapter 1037 A Linked List of Strings class StringLinkedList

Chapter 1038 Moving Down a Linked List

Chapter 1039 Adding a Node at the Start

Chapter 1040 A Linked List Demonstration class LinkedListDemo

Chapter 1041 A Linked List Demonstration, cont.

Chapter 1042 Null Pointer Exception The message NullPointerException indicates that access has been attempted using a class variable that names no object. A reference value of null means that no object is named by the reference. A NullPointerException does not need to be caught or declared in a throws clause. Instead, it indicates that the code needs to be fixed.

Chapter 1043 Privacy Leaks A method such as getLink in class ListNode returns an instance variable which is a reference to a node, potentially defeating the private restriction of the instance variable.

Chapter 1044 Privacy Leaks, cont. class ListNode

Chapter 1045 Privacy Leaks, cont. This problem can be remedied by making class ListNode a private inner class of class StringLinkedList.

Chapter 1046 Privacy Leaks, cont. A method such as getData in class ListNode (page 754) does not create a privacy leak because, unlike almost any other class, class String has no methods that change the value of the string without changing the reference. Method Find (page ???) does not create a privacy leak because it is a private method.

Chapter 1047 Privacy Leaks, cont. class ListNode

Chapter 1048 Inner Classes An inner class is a class defined within another class.

Chapter 1049 Defining an Inner Class public class OuterClass { OuterClass_Instance_Variables OuterClass_Methods private class InnerClass { InnerClass_Instance_Variables InnerClass_Methods }

Chapter 1050 Access to Members The inner and outer classes’ methods have access to each other’s methods and instance variables, even when they are declared private.

Chapter 1051 Node Inner Classes By making the node class an inner class, data structure classes become self-contained. Further, the accessor and mutator methods of the inner class can be eliminated since instance variables of an inner class are accessible directly.

Chapter 1052 Node Inner Classes, cont. class StringLinkedListSelfContained

Chapter 1053 Node Inner Classes, cont. class StringLinkedListSelfContained, cont.

Chapter 1054 Iterators With a collection of objects, such as the nodes of a linked list, we often need to “step through” all the objects to perform some action on each object. An iterator allows us to “step through” a collection of objects.

Chapter 1055 Iterators, cont. The loop control variable of a for loop functions as an iterator for an array. for (int i = 0; i < a.length, i++) process a[i];

Chapter 1056 Iterators, cont. method arrayCopy()

Chapter 1057 Iterators, cont. Similarly, an instance variable capable of referencing a node, can serve the same purpose as the loop control variable in a for loop. Another instance variable capable of referencing a node can “follow behind” to provide access to the previous node.

Chapter 1058 Iterators, cont. class StringLinkedListWithIterator

Chapter 1059 Iterators, cont. class StringLinkedListWithIterator, cont.

Chapter 1060 Iterators, cont. class StringLinkedListWithIterator, cont.

Chapter 1061 Advancing to the Next Node

Chapter 1062 Adding a Node

Chapter 1063 Deleting a Node

Chapter 1064 A Linked List Can Be Its Own Iterator Often we want the iterator of a linked list to be an object of some sort. The same linked-list object can be used as the linked list and as the iterator.

Chapter 1065 Internal and External Iterators An iterator defined within a linked-list class is an internal iterator. When the elements of a linked list are copied into an array and iterated using the loop control variable of the array, the loop control variable is an external iterator because the iterator is outside the linked list.

Chapter 1066 Exception Handling with Linked Lists Occasionally, we do not want to end a program that uses a linked list when something unusual happens. In these rare cases, an exception can be thrown and handled appropriately.

Chapter 1067 Exception Handling with Linked Lists, cont. method goToNext

Chapter 1068 Exception Handling with Linked Lists, cont. Class LinkedListException

Chapter 1069 Variations on a Linked List A reference to the last node in a linked list can be useful. … public ListNode head; public ListNode tail; … A linked list can contain (or reference) any kind of data.

Chapter 1070 Variations on a Linked List, cont. A linked list can contain different kinds of objects private class ListNode { private Object data; private ListNode link;... }

Chapter 1071 Variations on a Linked List, cont. An additional reference can be added to reference the previous node, producing a doubly-linked list. private class ListNode { private Object data; private ListNode next; private ListNode previous;... }

Chapter 1072 Variations on a Linked List, cont.

Chapter 1073 Variations on a Linked List, cont. The last node in a singly-linked list can reference the first node, producing a circularly-linked list. The last node in a doubly-linked list can reference the first node with its next reference, and the first node can reference the last node with its previous reference, producing a doubly-circularly-linked list.

Chapter 1074 Other Linked Data Structures Many colleges and universities offer a course devoted entirely to the study of data structures. Typically, a data structure can be implemented by “linking” its elements together. Example data structures include stacks, queues, deques, trees, binary trees, graphs, and directed graphs.

Chapter 1075 Introduction to Generics Java 5.0 allows definitions, called generics, that include parameters for types. Generics can be subtle and full of pitfalls. We provide an introduction to generics. Serious programming with generics is presented in more advanced texts.

Chapter 1076 Generic Basics Classes and methods can have a type parameter. Any class type can be substituted for the type parameter, producing a specific class type or method.

Chapter 1077 class Sample Generic Basics, cont.

Chapter 1078 Generic Basics, cont. A class definition with a type parameter is stored in a file and compiled just like any other class. When used in code a class type must be specified so that it can be substituted for the type parameter.

Chapter 1079 Generic Basics, cont. example Sample o1 = new Sample (); o1.setData(“Hello”); Sample o2 = new Sample (); Species s = new Species(); o2.setData(s);

Chapter 1080 Generic Basics, cont. You cannot substitute a primitive type for a type parameter. You must instead use a class type.

Chapter 1081 Programming Example: A Generic Linked List class LinkedList

Chapter 1082 Programming Example: A Generic Linked List, cont. class LinkedList, cont.

Chapter 1083 Programming Example: A Generic Linked List, cont. class GenericDemo

Chapter 1084 Programming Example: A Generic Linked List, cont.

Chapter 1085 Generic Constructor The class name in a parameterized class definition has a type parameter attached. But, a generic constructor name has no type parameter and the type parameter is not used in the heading of the constructor definition. public LinkedList() not public LinkedList () // ILLEGAL

Chapter 1086 Limited Use of the Type Parameter Within the definition of a parameterized class definition, there are places where a type name is allowed, but a type parameter is not allowed. Type parameters cannot be used in simple expressions that use new to create a new object.

Chapter 1087 Limited Use of the Type Parameter examples T object = new T(); // ILLEGAL T[] a = new T[10]; // ILLEGAL –In both cases, the first T is legal, but the second T is illegal.

Chapter 1088 Summary You have become familiar with vectors. You have learned about linked data structures in Java. You have learned how to manipulate linked lists. You have learned to use inner classes in defining linked data structures

Chapter 1089 Summary, cont. You have learned about iterators. You have learned about generics (parameters for types).