An ArrayBased Implementation of the ADT List public
![An Array-Based Implementation of the ADT List public class List. Array. Based implements List. An Array-Based Implementation of the ADT List public class List. Array. Based implements List.](https://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-1.jpg)
An Array-Based Implementation of the ADT List public class List. Array. Based implements List. Interface { private static final int MAX_LIST = 50; private Object items[]; // an array of list items private int num. Items; // number of items in list
![An Array-Based Implementation of the ADT List public List. Array. Based() { items = An Array-Based Implementation of the ADT List public List. Array. Based() { items =](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-2.jpg)
An Array-Based Implementation of the ADT List public List. Array. Based() { items = new Object[MAX_LIST]; num. Items = 0; } // end default constructor
![An Array-Based Implementation of the ADT List public boolean is. Empty() { return (num. An Array-Based Implementation of the ADT List public boolean is. Empty() { return (num.](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-3.jpg)
An Array-Based Implementation of the ADT List public boolean is. Empty() { return (num. Items == 0); } // end is. Empty public int size() { return num. Items; } // end size
![Insertion into Array What happens if you want to insert an item at a Insertion into Array What happens if you want to insert an item at a](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-4.jpg)
Insertion into Array What happens if you want to insert an item at a specified position in an existing array? l l Write over the current contents at the given index (which might not be appropriate), or The item originally at the given index must be moved up one position, and all the items after that index must shuffled up
![An Array-Based Implementation of the ADT List public void add(int index, Object item) throws An Array-Based Implementation of the ADT List public void add(int index, Object item) throws](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-5.jpg)
An Array-Based Implementation of the ADT List public void add(int index, Object item) throws List. Exception, List. Index. Out. Of. Bounds. Exception { if (num. Items >= MAX_LIST) { throw new List. Exception("List. Exception on add: "+ " out of memory"); } // end if if (index < 1 || index > num. Items+1) { // index out of range throw new List. Index. Out. Of. Bounds. Exception( "List. Index. Out. Of. Bounds. Exception on add"); } // end if
![An Array-Based Implementation of the ADT List // make room for new element by An Array-Based Implementation of the ADT List // make room for new element by](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-6.jpg)
An Array-Based Implementation of the ADT List // make room for new element by shifting all items at // positions >= index toward the end of the // list (no shift if index == num. Items+1) for (int pos = num. Items; pos >= index; pos--) { items[pos] = items[pos-1]; } // end for // insert new items[index-1] = item; num. Items++; } //end add
![Removal from Arrays What happens if you want to remove an item from a Removal from Arrays What happens if you want to remove an item from a](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-7.jpg)
Removal from Arrays What happens if you want to remove an item from a specified position in an existing array? l l Leave gaps in the array, i. e. indices that contain no elements, which in practice, means that the array element has to be given a special value to indicate that it is “empty”, or All the items after the (removed item’s) index must be shuffled down
![An Array-Based Implementation of the ADT List public void remove(int index) throws List. Index. An Array-Based Implementation of the ADT List public void remove(int index) throws List. Index.](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-8.jpg)
An Array-Based Implementation of the ADT List public void remove(int index) throws List. Index. Out. Of. Bounds. Exception { if (index >= 1 && index <= num. Items) { // delete item by shifting all items at // positions > index toward the beginning of the list // (no shift if index == size) for (int pos = index+1; pos <= size(); pos++) { items[pos-2] = items[pos-1]; } // end for num. Items--; } else { // index out of range throw new List. Index. Out. Of. Bounds. Exception( "List. Index. Out. Of. Bounds. Exception on remove"); } // end if } // end remove
![An Array-Based Implementation of the ADT List public Object get(int index) throws List. Index. An Array-Based Implementation of the ADT List public Object get(int index) throws List. Index.](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-9.jpg)
An Array-Based Implementation of the ADT List public Object get(int index) throws List. Index. Out. Of. Bounds. Exception { if (index >= 1 && index <= num. Items) { return items[index-1]; } else { // index out of range throw new List. Index. Out. Of. Bounds. Exception( "List. Index. Out. Of. Bounds. Exception on get"); } // end if } // end get
![An Array-Based Implementation - Summary l Good things: l l l Fast, random access An Array-Based Implementation - Summary l Good things: l l l Fast, random access](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-10.jpg)
An Array-Based Implementation - Summary l Good things: l l l Fast, random access of elements Very memory efficient, very little memory is required other than that needed to store the contents (but see bellow) Bad things: l l Slow deletion and insertion of elements Size must be known when the array is created and is fixed (static)
![ADT List using Dynamic arrays l l l A dynamic data structure is one ADT List using Dynamic arrays l l l A dynamic data structure is one](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-11.jpg)
ADT List using Dynamic arrays l l l A dynamic data structure is one that changes size, as needed, as items are inserted or removed l The Java Array. List class is implemented using a dynamic array There is usually no limit on the size of such structures, other than the size of main memory Dynamic arrays are arrays that grow (or shrink) as required l In fact a new array is created when the old array becomes full by creating a new array object, copying over the values from the old array and then assigning the new array to the existing array reference variable
![Dynamic Array top = 4 6 1 7 8 0 1 2 3 4 Dynamic Array top = 4 6 1 7 8 0 1 2 3 4](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-12.jpg)
Dynamic Array top = 4 6 1 7 8 0 1 2 3 4 5
![Dynamic Array insert 5 top = 4 6 1 7 8 0 1 2 Dynamic Array insert 5 top = 4 6 1 7 8 0 1 2](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-13.jpg)
Dynamic Array insert 5 top = 4 6 1 7 8 0 1 2 3 4 5
![Dynamic Array top = 5 6 1 7 8 5 0 1 2 3 Dynamic Array top = 5 6 1 7 8 5 0 1 2 3](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-14.jpg)
Dynamic Array top = 5 6 1 7 8 5 0 1 2 3 4 5
![Dynamic Array top = 5 6 1 7 8 5 0 1 2 3 Dynamic Array top = 5 6 1 7 8 5 0 1 2 3](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-15.jpg)
Dynamic Array top = 5 6 1 7 8 5 0 1 2 3 4 5 insert 2
![Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 Dynamic Array top = 6 6 1 7 8 5 2 0 1 2](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-16.jpg)
Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 3 4 5 insert 3
![Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 Dynamic Array top = 6 6 1 7 8 5 2 0 1 2](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-17.jpg)
Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 3 4 5 insert 3 !The array is full and there is no room for a new item!
![Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 Dynamic Array top = 6 6 1 7 8 5 2 0 1 2](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-18.jpg)
Dynamic Array top = 6 6 1 7 8 5 2 0 1 2 3 4 5 insert 3 So we will create a new, bigger array …
![Dynamic Array top = 6 0 1 6 1 7 8 5 2 0 Dynamic Array top = 6 0 1 6 1 7 8 5 2 0](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-19.jpg)
Dynamic Array top = 6 0 1 6 1 7 8 5 2 0 1 2 3 4 5 6 insert 3 So we will create a new, bigger array … 7 8 9 10 11
![Dynamic Array top = 6 0 1 6 1 7 8 5 2 0 Dynamic Array top = 6 0 1 6 1 7 8 5 2 0](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-20.jpg)
Dynamic Array top = 6 0 1 6 1 7 8 5 2 0 1 2 3 4 5 6 insert 3 … copy the elements of the old array into it … 7 8 9 10 11
![Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3 Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-21.jpg)
Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3 4 5 … copy the elements of the old array into it … top = 6 6 1 7 8 5 2 0 1 2 3 4 5 6 7 8 9 10 11
![Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3 Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-22.jpg)
Dynamic Array insert 3 6 1 7 8 5 2 0 1 2 3 4 5 … and finally insert 3 into the new array. top = 7 6 1 7 8 5 2 3 0 1 2 3 4 5 6 7 8 9 10 11
![Dynamic Array 6 1 7 8 5 2 0 1 2 3 4 5 Dynamic Array 6 1 7 8 5 2 0 1 2 3 4 5](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-23.jpg)
Dynamic Array 6 1 7 8 5 2 0 1 2 3 4 5 The old array will eventually be deleted by Java’s garbage collector top = 7 6 1 7 8 5 2 3 0 1 2 3 4 5 6 7 8 9 10 11
![Dynamic Array Summary l Before every insertion, check to see if the array needs Dynamic Array Summary l Before every insertion, check to see if the array needs](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-24.jpg)
Dynamic Array Summary l Before every insertion, check to see if the array needs to grow l Question: When growing array, how much to grow it? l l Memory efficient? (by 1) Time efficient?
![Dynamic Array Summary l l Before every insertion, check to see if the array Dynamic Array Summary l l Before every insertion, check to see if the array](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-25.jpg)
Dynamic Array Summary l l Before every insertion, check to see if the array needs to grow Growing by doubling works well in practice, because it grows very large very quickly l l 10, 20, 40, 80, 160, 320, 640, 1280, … Very few array re-sizings must be done To insert n items you need to do log(n) re-sizings While the copying operation is expensive it does not have to be done often
![Dynamic Array Problems l l When the doubling does happen it may be timeconsuming Dynamic Array Problems l l When the doubling does happen it may be timeconsuming](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-26.jpg)
Dynamic Array Problems l l When the doubling does happen it may be timeconsuming And, right after a doubling half the array is empty Re-sizing after each insertion would be prohibitively slow Deleting and inserting in the middle (on average) is still O(n)
![(Optional) Homework l Modify implementation of List. Array. Based class so that it works (Optional) Homework l Modify implementation of List. Array. Based class so that it works](http://slidetodoc.com/presentation_image_h/e5b4f808ee3ae48c20e006ec8a3791e1/image-27.jpg)
(Optional) Homework l Modify implementation of List. Array. Based class so that it works as dynamic List (it will never throw an exception List. Exception). (Basically it is enough to modify add() method. )
- Slides: 27