Download presentation
Presentation is loading. Please wait.
1
Workshop for CS-AP Teachers
Sorting and Big O Barb Ericson July 2006 Georgia Institute of Technology
2
Georgia Institute of Technology
Learning Objectives Understand at the conceptual level The need to group objects Limitations of Arrays Collections Lists and Linked Lists Sets and Maps Stacks and Queues Trees Georgia Institute of Technology
3
Georgia Institute of Technology
Grouping Objects We often group objects A list of items to buy at a grocery store Your friends names and phone numbers Your homework for each class A record of all of your ancestors A sorted list of people in a class Georgia Institute of Technology
4
Georgia Institute of Technology
Array Limitations You can use arrays to store multiple objects You need to know many items there will be You specify the size when you create an array Item[] shoppingList = new Item[10]; What happens if the array runs out of space? If you try to add an element passed the last valid index you get java.lang.ArrayIndexOutOfBoundsException You could create a bigger array You would have to copy all the elements from the old array to the new array What if you don’t need all the space in an array? Georgia Institute of Technology
5
Georgia Institute of Technology
Collection Classes Java has collection classes to handle grouping objects The classes don’t require you to know how many objects you will need to store The collections will grow and shrink as needed There are different types of collections depending on what you need Keep the order of the objects - List Make sure there are no duplicates – Set Associate one object with another - Map Collections hold objects, not primitive values. You will need to wrap primitives in their wrapper classes to put the in collections: Integer, Double, Boolean, etc. You won’t need to do this after Java 1.5. Georgia Institute of Technology
6
Georgia Institute of Technology
Collection Exercise Look up the Collection Interface How do you add objects to a collection? Is there a way to add two collections together? Is there a way to get an intersection of two collections? Is there a way to remove an object from a collection? How do you empty a collection? Can you get an array from a collection? Georgia Institute of Technology
7
Collections hold object references
When you add an object to a collection You add a reference to the object Not a copy of the object Many collections can hold references to the same object Variables may also reference the same object Ham: Item Eggs: Item Lettuce: Item Cheerios: Item Georgia Institute of Technology
8
List and Set Interfaces and Classes
Collection <<interface>> List <<interface>> Set These classes are in java.util package. <<interface>> SortedSet HashSet ArrayList Vector LinkedList TreeSet Georgia Institute of Technology
9
Georgia Institute of Technology
List We often keep ordered lists of things “To do” list People in a line Parts A list has an order First thing, second thing, third thing, etc. Lists may have duplicate items You can get, add, or remove an item anywhere in a list Georgia Institute of Technology
10
Georgia Institute of Technology
Java Lists The first index is 0 The last valid index is list.size() – 1 ArrayList is a class that implements the List interface Using an array and allows null values in the list Vector is an older class that also uses an array It is like ArrayList but it is synchronized LinkedList is a class that implements the List interface Using a linked structure, not an array Georgia Institute of Technology
11
Linked List - java.util.LinkedList
A linked list has nodes that contain data and a reference to the next node A doubly linked list has references to previous nodes as well head Sue Mary Tasha null The Java LinkedList class uses a doubly linked list. null Sue Mary Tasha null head tail Georgia Institute of Technology
12
Ideas for Teaching Linked Lists
Give random students a paper that tells them who the next and previous student is Give one student the name of the first person in the list Walk through adding a new student to the front of the list getting the 5th person in the list removing the 3rd person in the list removing the 1st person in the list Georgia Institute of Technology
13
Arrays versus Linked List
A book is like an array The pages are ordered sequentially It is easy to find a particular page A magazine article is like a linked list Has groups of pages and a reference to the next group of pages A treasure hunt is like a linked list You start with one clue that takes you to the location of the next clue One idea for an exercise would be to have the students create clues for a treasure hunt. Georgia Institute of Technology
14
ArrayList versus LinkedList
If you need to access items randomly Use an ArrayList Quick to access a random location Can be slower to add to and remove from If it needs to create a new array and copy old items If you are doing lots of adding/removing from a list Use a LinkedList Quick to add to or remove from Slow to do random access Georgia Institute of Technology
15
Georgia Institute of Technology
Using Iterator One way to access all elements of a List is to use a for loop and increment the index from 0 to < list.size() Use the index to get items from the list item = itemList.get(index); Another approach is to use an iterator Iterator<Item> iterator = itemList.iterator(); while (iterator.hasNext()) item = iterator.next(); Iterator is an interface. Each collection knows how to create an iterator that helps you iterate through a collection of that type. Georgia Institute of Technology
16
Georgia Institute of Technology
Iterator Exercise Is it better to use an iterator or an index to get all of the elements of an ArrayList? of a LinkedList? What about if you want to access every other element Which should you use if you don’t know the implementing class? Georgia Institute of Technology
17
Georgia Institute of Technology
ListIterator Inherits from Iterator Adds The ability to traverse a list in either direction The ability to modify the list during iteration Add a new element before the current next element public void add(Object obj); Change the last accessed element public void set(Object obj); One way to use a list iterator would be to double every element in a linked list using add. Another way would be to change replace a node in a linked list. Georgia Institute of Technology
18
Georgia Institute of Technology
ListNode AP Class Has value and next fields Can get and set the fields Has a constructor that take the value and next node Uses the keyword null to indicate the end of the linked list ListNode Object value ListNode next public Object getValue() public ListNode getNext() public void setValue(Object value) public void setNext(ListNode node) Georgia Institute of Technology
19
Loop through a linked list with ListNode
Start with a reference to the head of the list Each time through the loop move the reference to the next node Stop the loop when the reference is null Continue while the reference is not null ListNode node = null; for (node = head; node != null; node = node.getNext()) Georgia Institute of Technology
20
Georgia Institute of Technology
Testing the Loop Does this work when head is null? Does it work when there is one node in the list? Does it work when there is more than one node in the list? head null head Sue null head Sue Mary Tasha null Georgia Institute of Technology
21
Add to the front of a linked list
Set the new nodes next to the node referenced by head Change head to point to the new node head Sue Mary Tasha null Fred null What happens if you change head first? Is there any problem if head is null? head Fred Sue Mary Tasha null Georgia Institute of Technology
22
Georgia Institute of Technology
Stacks A stack holds objects with the last object put in the stack being the first one returned Last-in-first-out structure (LIFO) Like a stack of cafeteria plates Or a holder for bathroom cups Or a Pez container Stacks are used to hold the list of operations that you might want to undo When you click “Undo” the last thing you did is undone Georgia Institute of Technology
23
Georgia Institute of Technology
Teaching Stacks Have each student put a book on a stack of books Then ask a student to take off a book from the stack Where did people put the new books? Where did people take books from? Georgia Institute of Technology
24
Georgia Institute of Technology
Stack Class Java 5.0 has a Stack Class class java.util.Stack<E> E push(E x) Add x to the top of the stack E pop() Remove the top of the stack and return it E peek() Return the top item on the stack boolean isEmpty() Return true if the stack is empty The java.util.Stack class has other methods but you might lose credit if you use them on the exam. Georgia Institute of Technology
25
Georgia Institute of Technology
Queues A queue holds objects with the first object put in the queue the first one returned First-in-first-out structure (FIFO) Like the ticket line at the movies Or a car wash with cars moving through Use queues to track events and objects A queue of requests for printing Handle the first one before the next one A queue of people in line to buy tickets for a movie People at the front of the queue buy tickets first Georgia Institute of Technology
26
Georgia Institute of Technology
Teaching Queues Have some students form a line as if in line to buy tickets for a movie Who should be waited on first? Who would be waited on next? When new people come where do they enter the line? Georgia Institute of Technology
27
Georgia Institute of Technology
Queue Interface java.util.Queue has a Queue Interface Implemented by two Classes java.util.LinkedList Java.util.PriorityQueue New methods boolean add(E x) Add to the end (tail) of the queue E remove() Remove front of queue and return it E peek() Return the front of the queue boolean isEmpty() Return true if the queue is empty Georgia Institute of Technology
28
Georgia Institute of Technology
Set A set does not preserve order The order things are retrieved from a set is not necessarily the same order they were placed in a set Sets do not allow duplicate elements elementA.equals(elementB) If you try to add an element that is equal to another element of the set it won’t add it And will return false Georgia Institute of Technology
29
Set Classes HashSet TreeSet
Uses equals and hashCode to compare objects and to check for duplicates TreeSet Objects must implement Comparable and are sorted based on the results of compareTo <<interface>> Set <<interface>> SortedSet HashSet For TreeSet two objects are duplicates if compareTo returns 0. TreeSet Georgia Institute of Technology
30
Georgia Institute of Technology
Maps Maps hold key and value pairs Use a key to put a value into the map Use a key to get a value from a map There can’t be duplicate keys There can be duplicate values A value can be associated with different keys Used to look up associated data Like look up a customer record from a phone number Or like safety deposit boxes Georgia Institute of Technology
31
Georgia Institute of Technology
Map Interface Get the number of keys in the map public int size(); Put a value in the map for the given key Returns the old object stored for this key public Object put(Object key, Object value); Get a value from the map for the given key public Object get(Object key); Check if the key is used in the map public boolean containsKey(Object key); Get a set of the keys used in the map public Set keySet(); Georgia Institute of Technology
32
Map Interfaces and Classes
HashMap Hashtable <<interface>> SortedMap TreeMap Georgia Institute of Technology
33
Georgia Institute of Technology
Map Classes HashMap Stores keys and values without regards to order entered Allows null values and a null key Hashtable Older class like HashMap Synchronized TreeMap Holds keys in sorted order If you don’t need the map to be synchronized use HashMap because it will be faster than Hashtable. Georgia Institute of Technology
34
Georgia Institute of Technology
Hashing HashMap and Hashtable use hashing on the key to find the location where the value is stored Using the hashCode() method inherited from Object This method is overridden for String You should override this method in your classes Maps the key to an index in an array Georgia Institute of Technology
35
Georgia Institute of Technology
Hashing Procedure When you put a value in a HashMap for a key First the hashCode method is called on the key object This returns an int value which is mapped from 0 to the array length – 1 Often by using remainder (%) There may be a value at that index from a different key This is called a collision Georgia Institute of Technology
36
Georgia Institute of Technology
Handling Collisions The array is often an array of lists A bucket that holds more than one hash node A good hashCode() method should result in few collisions and small lists When more than one key has the same index The hash node is added to the list When you look for a value based on a key If it maps to an index with a list It looks for the key using equals Solving collisions by storing a list is called chaining. A HashNode usually stores the key and value. Georgia Institute of Technology
37
Georgia Institute of Technology
hashCode() Method The goal is to get a good spread of int results Use some combination of fields Like the hashCode for some String fields added to some prime number times some other field Different keys can result in the same hashCode() result The same key object must give the same hashCode() result Georgia Institute of Technology
38
Georgia Institute of Technology
Trees Linked lists have nodes that hold a value and a reference to the “next” node What if you need to track more than one “next” node? Like you want to record your ancestors You can use a tree Each tree node has a value (a person) And a reference to the person’s mother And a reference to the person’s father Georgia Institute of Technology
39
Georgia Institute of Technology
Example Ancestor Tree root Barbara Ericson Janet Hund Charles Ericson Edna Wenzel Opal Peters Francis Hund Edward Ericson Georgia Institute of Technology
40
Georgia Institute of Technology
Binary Tree Each tree node has at most one parent node Each tree node can have at most 2 children The top node in the tree is called the root Tree nodes without any children nodes are called leaves root Left child Right child An ancestor tree is a binary tree but instead of using left and right to reference the children nodes you could use mother and father. leaves Georgia Institute of Technology
41
Georgia Institute of Technology
Tree Node AP Class Has fields: value, left, and right Can get and set all fields Has a constructor that takes a value, left tree node and right tree node TreeNode private Object value private TreeNode left private TreeNode right public Object getValue() public TreeNode getLeft() public TreeNode getRight() public void setValue(Object o) public void setLeft(TreeNode n) public void setRight(TreeNode n) Georgia Institute of Technology
42
Georgia Institute of Technology
Trees are Recursive Each tree node is the root of a sub-tree of the original tree This allows the use of recursion A method invokes itself On a subset of the original problem Like a subtree There has to be an end condition That stops the recursion No more subtrees Georgia Institute of Technology
43
Get the Number of Nodes in a Tree
If the root is null The number of nodes is 0 If the root isn’t null Add one to the count Add to the count the number of nodes in the left subtree Add to the count the number of nodes in the right subtree Georgia Institute of Technology
44
Get the Number of Nodes Method
Some books use a class (static) method to count the number of nodes And pass in the current node public static int getNumNodes(TreeNode node) { if (node == null) return 0; else return 1 + getNumNodes(node.getLeft()) + getNumNodes(node.getRight()); } Some books have this declared as an object method but since it doesn’t operate on the implicit current object it should be declared static. Some books declare this method in a Tree class. But since it operates on a TreeNode it should be in the TreeNode class. There can be a method with the same name in a Tree class that calls this method with the root node. Georgia Institute of Technology
45
Georgia Institute of Technology
What is wrong with this? Static methods are used when there is no current object Or for general methods In this case there is a current tree node And the method does operate on it It is explicitly passed to the method So this should be an object method And the current object should be implicitly passed Georgia Institute of Technology
46
Modified Get Number of Nodes
public int getNumNodes() { int count = 0; // increment count count = count + 1; // add to the count the number of nodes in the left subtree if (left != null) count = count + left.getNumNodes(); // add the to count the number of nodes in the right subtree if (right != null) count = count + right.getNumNodes(); return count; } This should be a method of the TreeNode class. Georgia Institute of Technology
47
Tree class getNumNodes()
public int getNumNodes() { int count = 0; // the default is no nodes // if the root isn't null get the number of nodes if (root != null) count = root.getNumNodes(); return count; } Georgia Institute of Technology
48
Georgia Institute of Technology
Tree Traversals In-order traversal (left-data-right) Do the recursive call on the left subtree Do something with the value at the node Do the recursive call on the right subtree Pre-order traversal (data-left-right) Post-order traversal (left-right-data) Georgia Institute of Technology
49
Georgia Institute of Technology
Tree Traversals 15 11 13 18 7 8 Draw the tree nodes with small lines at 90, 180, and 270 degrees. Draw lines starting from the left side of the root and go through the small lines as you follow the arrows and try to stay as close to the nodes as you can. But do not cross the arrows. An pre-order traversal will hit the lines at 270 degrees in the order the line crosses these lines from left to right. For the above tree this is: 15, 13, 18, 7, 11, 8 An in-order traversal will hit the lines at 180 degrees in the order the line crosses these lines from left to right. For the above tree this is: 18, 13, 7, 15, 11, 8. A post-order traversal will hit the lines at 90 degrees in the order the line crosses these lines from the left to the right. For the above tree this is: 18, 7, 13, 8, 11, 15. Georgia Institute of Technology
50
Binary Search Trees (BSTs)
A binary tree where the value at each node is greater than the values in all of the nodes in the left subtree and less than the values in all of the nodes in the right subtree 33 21 38 6 23 44 26 Georgia Institute of Technology
51
Georgia Institute of Technology
Binary Search Tree Orders values Usually using the Comparable Interface Allows for quick search For a “well filled” tree O(log n) And quick insertion and deletion of nodes An in-order traversal of a BST will give values in ascending order Used by TreeSet and TreeMap Georgia Institute of Technology
52
Georgia Institute of Technology
Priority Queue Used to store items with various priorities Like printer requests Or airplanes waiting to land Can hold several items with the same priority Can item an object to the queue Can get the item with the highest priority Often considered to be the “minimum” item Georgia Institute of Technology
53
Georgia Institute of Technology
PriorityQueue Class Georgia Institute of Technology
54
Georgia Institute of Technology
PriorityQueue Class class java.util.PriorityQueue<E> boolean add(E x) Add the passed item to the queue E remove() Remove top of the queue and return it E peek() Return the top item on the queue boolean isEmpty() Return true if the queue is empty Georgia Institute of Technology
55
Georgia Institute of Technology
Heaps A heap is a complete binary tree Each level other than the last one is full of nodes The last level must have all missing nodes grouped to the right The value at each node is less than the values In both the left and right subtrees The minimum value is at the root 3 8 16 12 23 44 23 This is a description of a minimum heap. Another heap is a maximum heap which requires the root to be the maximum value in the tree. 13 Georgia Institute of Technology
56
Georgia Institute of Technology
Adding a Node to a Heap Add it to the first missing child reference Then move node values as required to satisfy the requirement that the each node’s value is less than the values in the left and right subtree Called Heapify 3 6 8 16 3 8 16 6 3 Removing is similar. Take the root and then move up the value in the last child on the right in the bottom level. Then move values to fix the tree to meet the heap requirements. 6 16 8 Georgia Institute of Technology
57
Data Structures Exercise
What data structure would you use to hold a known number of students in an order? What data structure would you use to store your friends names and cell phone numbers? What data structure would you use to store orders in a fast-food restaurant? What data structure would you use to store recent commands to allow undo? What data structure would you use to store a sorted list of teachers? Georgia Institute of Technology
58
Georgia Institute of Technology
Summary Collection classes hold groups of objects Collections can grow and shrink Lists hold objects in order and allow duplicate objects Linked lists have nodes that hold a value and a reference to the next node Doubly linked list nodes also hold a reference to the previous node Sets hold objects without preserving order and do not allow duplicate objects in the set Maps associate a key object with a value object Trees have nodes that hold values and references to children nodes Georgia Institute of Technology
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.