Lists Discussion F Generics Tutorial (Ref: Gilad Baracha) Auto - - PowerPoint PPT Presentation

lists
SMART_READER_LITE
LIVE PREVIEW

Lists Discussion F Generics Tutorial (Ref: Gilad Baracha) Auto - - PowerPoint PPT Presentation

Lists Discussion F Generics Tutorial (Ref: Gilad Baracha) Auto Boxing Erasure Sub Classes Unchecked Type cast Bounded Wildcards Iterator List<Integer> lint = new ArrayList<Integer>(); //1 lint.add(new


slide-1
SLIDE 1

Lists

Discussion F

slide-2
SLIDE 2

Generics Tutorial (Ref: Gilad Baracha)

  • Auto Boxing
  • Erasure
  • Sub Classes
  • Unchecked Type cast
  • Bounded Wildcards
slide-3
SLIDE 3

Iterator

List<Integer> lint = new ArrayList<Integer>(); //1 lint.add(new Integer(100)); //2 Iterator<Integer> intIter = lint.iterator(); //3 Integer i1 = intIter.next(); //4 lint.add(101); //5 int i2 = intIter.next(); //6 ConcurrentModificationException

slide-4
SLIDE 4

Erasure

public class X { public X();} //7 public class Y extends X { public Y();} //8 List<X> lx = new ArrayList<X>(); //9 List<Y> ly = new ArrayList<Y>(); //10 System.out.println(lx.getClass()==ly.getClass());//12 true

slide-5
SLIDE 5

Erasure (2)

public class X { public X();} //7 public class Y extends X { public Y();} //8 List<X> lx = new ArrayList<X>(); //9 List<Y> ly = new ArrayList<Y>(); //10 if (lx instanceof ArrayList<X>) {}//unchecked warning List<X> otherlx = (List<X>) lx;

slide-6
SLIDE 6

Subtype

public class X { public X();} //7 public class Y extends X { public Y();} //8 List<X> lx = new ArrayList<X>(); //9 List<Y> ly = new ArrayList<Y>(); //10 lx = ly; //11 Compiler Error

slide-7
SLIDE 7

Subtype (2)

void printCollection(Collection c) { //13 Iterator i = c.iterator(); while(i.hasNext()) { System.out.println(i.next()); } } void printCollection(Collection<Object> c) { //14 for (Object o: c) { System.out.println(o); } } printCollection(lint); //??

slide-8
SLIDE 8

Bounded Wildcards

  • Used to express polymorphism
  • Wildcard, means some type

– <?>

  • lower bound, some super type of T

– <? super T>

  • upper bound, some sub class of B

– <? extends B>

slide-9
SLIDE 9

Wildcards

void printCollection(Collection<?> c){ for (Object o: c) { System.out.println(o); } } Collection<?> c = new ArrayList<Integer>(); c.add(new Object()); // Error void printCollection(Collection<? extends Shape> c){ for (Shape s: c) { System.out.println(s.area()); } }

slide-10
SLIDE 10

Generic Functions

<T> void arrayToCollection(T[] a, Collection<T> c) { for (T t: a) { c.add(t); } } Integer [] a = new Integer[10];... Collection<Integer> c = new ArrayList<Integer>(); arrayToCollection(a, c);

  • No need to pass actual type, compiler infers it
  • They can have bounds too
  • Used when arguments/return type are correlated
slide-11
SLIDE 11

Inner Classes

  • Block Scoped

– definition similar to definition of a field or a

method

  • Static

– do not have the block scope

slide-12
SLIDE 12

Snippets // 1

public class X { //1 private int fx; public class I { int fi; public I() { fi = fx; } } } X.I ci = new X.I(); java X$I // to run main method in X.I

slide-13
SLIDE 13

// 2

public class X { //2 private int fx; private I i = new I(); private int fx2 = i.fi; public class I { private int fi; public I() { fi = fx; } } }

slide-14
SLIDE 14

// 3

public class X { //3 int fx; public static class I { int fi; public I() { fi = fx; } } }

slide-15
SLIDE 15

DisInherit Methods

  • Not really, has to satisfy Is-a
  • Illegal to narrow visibility
  • Can reimplement and throw exception
slide-16
SLIDE 16

DisInherit

public class X { public void function() {} } public class Y extends X { private void function() {} // compiler error } public class Z extends X { private void function() { throw new NoSuchMethodException(); } }

slide-17
SLIDE 17

Lisp List

car cdr car cdr

slide-18
SLIDE 18

Lisp List Interface

public interface LispList<E> { public int length(); public E first (); public LispList<E> rest (); }

slide-19
SLIDE 19

Lisp List

public Cons<E> implements LispList<E> { E car; LispList<E> cdr; public Cons(E e) {car = e;} public Cons(LispList<E> onelist, LispList<E> otherlist) {} public int length() {} public E first () {return car;} public LispList<E> rest () {return cdr;} }

slide-20
SLIDE 20

Lisp List

  • Empty list
  • How to construct from two lists?
  • How to find length?
slide-21
SLIDE 21

List of Arrays

100 100 100 1 2 3

slide-22
SLIDE 22

List Of Arrays

  • Each node has same capacity

– can compute how many nodes from start the

required index will be

  • nodes have different capacity

– can balance the list length

slide-23
SLIDE 23

Using List<E>

public class ListOfArrays<E> { int totalCount; int totalCapacity; int nodeCapacity; List<E []> list; private void checkIndex(int idx) {} public E get(int idx){} public void set(int idx, E e) {} }

slide-24
SLIDE 24

List of Arrays

public class ListOfArrays<E> { int totalCount; int totalCapacity; List<DataNode<E>> list; private class DataNode<E> { int count; int capacity; E [] array; } private void checkIndex(int idx) {} public E get(int idx){} public void set(int idx, E e) {} }