Dynamic Data Structures and Generics Chapter 10. Outline Vectors Linked Data Structures Introduction to Generics.

Slides:



Advertisements
Similar presentations
Chapter 24 Lists, Stacks, and Queues
Advertisements

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
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 23 : Generics King Fahd University of Petroleum & Minerals College of Computer Science.
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.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 22 Lists, Stacks, Queues, and Priority.
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.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 13 Pointers and Linked Lists.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 22 Java Collections.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Chapter 22 Java Collections.
ArrayList, Multidimensional Arrays
Lists Ellen Walker CPSC 201 Data Structures Hiram College.
Chapter 18 Java Collections Framework
Chapter 11. Multidimensional Arrays and Vectors Multidimensional Arrays Vectors Computer Programming with JAVA.
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.
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.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Stacks.
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.
Chapter 15 Linked Data Structures Slides prepared by Rose Williams, Binghamton University Kenrick Mock University of Alaska Anchorage Copyright © 2008.
CMSC 202 Advanced Section Classes and Objects: Object Creation and Constructors.
CSE 1201 Object Oriented Programming ArrayList 1.
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Multidimensional Arrays l Vectors Multidimensional Arrays.
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.
Chapter 101 Dynamic Data Structures and Generics Chapter 10.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
Chapter 12: Pointers, Classes, Virtual Functions, Abstract Classes, and Lists.
Java Generics. Lecture Objectives To understand the objective of generic programming To be able to implement generic classes and methods To know the limitations.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
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
Java Programming: Guided Learning with Early Objects
Fundamentals of Java: AP Computer Science Essentials, 4th Edition
Vectors Linked Data Structures
CMSC 202 ArrayList Aug 9, 2007.
Arrays and Collections
Dynamic Data Structures and Generics
Object Oriented Programming in java
CMSC 202 ArrayList Aug 9, 2007.
Dynamic Data Structures and Generics
Introduction to Data Structure
Review: libraries and packages
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Dynamic Data Structures and Generics Chapter 10

Outline Vectors Linked Data Structures Introduction to Generics

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. Vectors are similar to arrays, but offer more flexibility.

Introduction, cont. 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. Java 5.0 allows definitions with parameters for types. These definitions are known as generics.

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

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.

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.)

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.

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.

Creating and Naming a Vector syntax Vector v1 = new Vector (); Vector v2 = new Vector (Initial_Capacity); Vector v2 = new Vector (Initial_Capacity, Capacity_Increment);

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);

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(postion); to remove the first occurrence of an element boolean done = v.removeElement(“Hello!”); to remove all elements v.removeAllElements();

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 position = v.indexOf(“Hi, Mom!”); to learn the location of the first occurrence of an element at or after a position int position = v.indexOf(“Hello”, startFrom);

Searching a Vector, cont. to learn the location of the last occurrence of an element int position = 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 first = v.lastElement();

Size and Capacity to learn if the vector is empty boolean none = v.isEmpty(); to learn the size of the vector int howMany = v.size(); 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(); to set the size v.setSize(howMany);

Vector Demonstration

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.

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.

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.

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.

(optional) 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.

AbstractList class Roughly equivalent to Vector except that it is unsynchronized. –More efficient in environments that synchronization are not required

Linked Data Structures: Outline Linked Lists Inner Classes Node Inner Classes Other Linked Data Structures

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.

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.

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. Each node is an object of a class that has (at least) two instance variables: –the data –the link.

Linked Lists, cont.

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 ==.

A Linked List of Strings

Moving Down a Linked List

Adding a Node at the Start

A Linked List Demonstration

Advancing to the Next Node

Adding a Node

Deleting a Node

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. This problem can be remedied by making class ListNode a private inner class of class StringLinkedList.

Inner Classes An inner class is a class defined within another class. An inner class provides a solution to the privacy leak problem.

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

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.

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.

Node Inner Classes, cont.

class StringLinkedListSelfContained, cont.

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. –Refer java.util package

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.

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.

class Sample 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.

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

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

Programming Example: A Generic Linked List

Programming Example: A Generic Linked List, cont.

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

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.

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.

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 about generics (parameters for types).