Topic 6 Generic Data Structures

Slides:



Advertisements
Similar presentations
Improving structure with inheritance Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Main concepts.
Advertisements

Generic programming in Java
CSE 143 Lecture 22: Advanced List Implementation (ADTs; interfaces; abstract classes; inner classes; generics; iterators)
Java Generics.
Loops Notes adapted from Dr. Flores. It repeats a set of statements while a condition is true. while (condition) { execute these statements; } “while”
1 Generics and Using a Collection Generics / Parameterized Classes Using a Collection Customizing a Collection using Inheritance Inner Classes Use of Exceptions.
Topic 6 Generic Data Structures "Get your data structures correct first, and the rest of the program will write itself." - David Jones.
1 Topic 4 Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“
CS 307 Fundamentals of Computer Science ADTS and Generic Data Structures 1 Topic 12 ADTS, Data Structures, Java Collections and Generic Data Structures.
CS 106 Introduction to Computer Science I 04 / 30 / 2010 Instructor: Michael Eckmann.
Arrays And ArrayLists - S. Kelly-Bootle
CS 307 Fundamentals of Computer ScienceInterfaces and Abstract Classes 1 Topic 7 Interfaces and Abstract Classes “I prefer Agassiz in the abstract, rather.
Chapter 21 Generics 1. Generics - Overview Generic Methods specify a set of related methods Generic classes specify a set of related types Software reuse.
Effective Java: Generics Last Updated: Spring 2009.
Improving structure with inheritance Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables Objects First with Java.
Improving structure with inheritance Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables Objects First with Java.
Arrays and ArrayLists in Java L. Kedigh. Array Characteristics List of values. A list of values where every member is of the same type. Each member in.
CS221 - Computer Science II Polymorphism 1. CS221 - Computer Science II Polymorphism 2 Outline  Explanation of polymorphism.  Using polymorphism to.
Polymorphism. 3 main programming mechanisms that constitute OOP: 1. Encapsulation 2. Inheritance 3. Polymorphism.
1 Generics Chapter 21 Liang, Introduction to Java Programming.
AP Computer Science edition Review 1 ArrayListsWhile loopsString MethodsMethodsErrors
CMSC 330: Organization of Programming Languages Java Generics.
Generic Data Structures "Get your data structures correct first, and the rest of the program will write itself." - David Jones EE 422CGenerics 1.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 19 Generics.
©SoftMoore ConsultingSlide 1 Generics “Generics constitute the most significant change in the Java programming language since the 1.0 release.” – Cay Horstmann.
1 CSC 2053 New from AutoBoxing 3 Before J2SE 5.0, working with primitive types required the repetitive work of converting between the primitive.
1 Topic 5 Polymorphism "“Inheritance is new code that reuses old code. Polymorphism is old code that reuses new code.”
EKT472: Object Oriented Programming
CMSC 202 ArrayList Aug 9, 2007.
ARRAYS (Extra slides) Arrays are objects that help us organize large amounts of information.
9 Improving structure with inheritance
Sixth Lecture ArrayList Abstract Class and Interface
Polymorphism.
ADT’s, Collections/Generics and Iterators
Java Generics.
Generics and Subtyping
Interfaces I once attended a Java user group meeting where James Gosling (Java's inventor) was the featured speaker. During the memorable Q&A session,
A tree set Our SearchTree class is essentially a set.
Chapter 5 Hierarchies IS-A associations superclasses subclasses
Continuing Chapter 11 Inheritance and Polymorphism
Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“ “Inheritance is new code that reuses old code. Polymorphism.
Generics.
Java Generics.
Array List Pepper.
Topic 7 Interfaces I once attended a Java user group meeting where James Gosling (one of Java's creators) was the featured speaker. During the memorable.
Chapter 9 Inheritance and Polymorphism
Chapter 19 Generics Dr. Clincy - Lecture.
Generics (Parametric Polymorphism)
CISC124 Assignment 4 on Inheritance due next Monday, the 12th at 7pm.
Polymorphism.
Chapter 9: Polymorphism and Inheritance
A tree set Our SearchTree class is essentially a set.
CMSC 202 ArrayList Aug 9, 2007.
Topic 10 Abstract Classes “I prefer Agassiz in the abstract,
Generic programming in Java
Topic 4 Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“
Parameter Passing in Java
Topic 5 Polymorphism "“Inheritance is new code that reuses old code. Polymorphism is old code that reuses new code.”
CMSC 202 ArrayList Aug 9, 2007.
slides created by Ethan Apter
Topic 10 Abstract Classes “I prefer Agassiz in the abstract,
ArrayLists 22-Feb-19.
Polymorphism.
"First things first, but not necessarily in that order " -Dr. Who
slides created by Alyssa Harding
Review: libraries and packages
Chapter 19 Generics.
CSE 143 Lecture 21 Advanced List Implementation
COMP204 Bernhard Pfahringer (with input from Robi Malik)
Polymorphism.
Presentation transcript:

Topic 6 Generic Data Structures "Get your data structures correct first, and the rest of the program will write itself."   - David Jones

Back to our Array Based List Started with a list of ints Don't want to have to write a new list class for every data type we want to store in lists Moved to an array of Objects to store the elements of the list // from array based list private Object[] myCon; CS314 Generics

Using Object In Java, all classes inherit from exactly one other class except Object which is at the top of the class hierarchy Object variables can refer to objects of their declared type and any descendants polymorphism Thus, if the internal storage container is of type Object it can hold anything primitives handled by wrapping them in objects. int – Integer, char - Character CS314 Generics

Difficulties with Object Creating generic containers using the Object data type and polymorphism is relatively straight forward Using these generic containers leads to some difficulties Casting Type checking Code examples on the following slides CS314 Generics

Clicker Question 1 What is output by the following code? A. i GenericList list = new GenericList(); // 1 String name = "Olivia"; list.add(name); // 2 System.out.print( list.get(0).charAt(2) );// 3 A. i B. No output due to syntax error at line // 1 C. No output due to syntax error at line // 2 D. No output due to syntax error at line // 3 E. No output due to runtime error. CS314 Generics

Code Example - Casting Assume a list class GenericList li = new GenericList(); li.add("Hi"); System.out.println( li.get(0).charAt(0) ); // previous line has syntax error // return type of get is Object // Object does not have a charAt method // compiler relies on declared type System.out.println( ((String)li.get(0)).charAt(0) ); // must cast to a String CS314 Generics

Code Example – type checking //pre: all elements of li are Strings public void printFirstChar(GenericList li) { String temp; for(int i = 0; i < li.size(); i++) { temp = (String)li.get(i); if( temp.length() > 0 ) System.out.println( temp.charAt(0) ); } // what happens if pre condition not met? CS314 Generics

Too Generic? Does this code compile? Yes No GenericList list = new GenericList(); list.add( "Olivia" ); list.add( new Integer(12) ); list.add( new Rectangle(1, 2, 3, 4) ); list.add( new GenericList() ); Yes No CS314 Generics

Is this a bug or a feature? CS314 Generics

"Fixing" the Method //pre: all elements of li are Strings public void printFirstChar(GenericList li) { String temp; for(int i = 0; i < li.size(); i++) { if( li.get(i) instanceof String ){ temp = (String)li.get(i); if( temp.length() > 0 ) System.out.println( temp.charAt(0) ); } CS314 Generics

Generic Types Java has syntax for parameterized data types Referred to as Generic Types in most of the literature A traditional parameter has a data type and can store various values jusfoo(intt like a variable public void x) Generic Types are like parameters, but the data type for the parameter is data type like a variable that stores a data type this is an abstraction. Actually, all data type info is erased at compile time CS314 Generics

Making our Array List Generic Data type variables declared in class header public class GenericList<E> { The <E> is the declaration of a data type parameter for the class any legal identifier: Foo, AnyType, Element, DataTypeThisListStores Sun style guide recommends terse identifiers The value E stores will be filled in whenever a programmer creates a new GenericList GenericList<String> li = new GenericList<String>(); CS314 Generics

Modifications to GenericList instance variable private E[] myCon; Parameters on add, insert, remove, insertAll Return type on get Changes to creation of internal storage container myCon = (E[])new Object[DEFAULT_SIZE]; Constructor header does not change CS314 Generics

Modifications to GenericList Careful with the equals method Recall type information is actually erased use of wildcard rely on the elements equals methods CS314 Generics

Using Generic Types Back to Java's ArrayList ArrayList list1 = new ArrayList(); still allowed, a "raw" ArrayList works just like our first pass at GenericList casting, lack of type safety CS314 Generics

Using Generic Types list2.add( "Isabelle" ); ArrayList<String> list2 = new ArrayList<String>(); for list2 E stores String list2.add( "Isabelle" ); System.out.println( list2.get(0).charAt(2) ); //ok list2.add( new Rectangle() ); // syntax error CS314 Generics

Parameters and Generic Types Old version //pre: all elements of li are Strings public void printFirstChar(ArrayList li){ New version //pre: none public void printFirstChar(ArrayList<String> li){ Elsewhere ArrayList<String> list3 = new ArrayList<String>(); printFirstChar( list3 ); // ok ArrayList<Integer> list4 = new ArrayList<Integer>(); printFirstChar( list4 ); // syntax error CS314 Generics

Generic Types and Subclasses ArrayList<Shape> list5 = new ArrayList<Shape>(); list5.add( new Rectangle() ); list5.add( new Square() ); list5.add( new Circle() ); // all okay list5 can store Shape objects and any descendants of Shape CS314 Generics