Notes on Typed Collections
Queue<String> myQueue= new LinkedList<String>();
    myQueue.add("Joe");
    System.out.println(myQueue);
    // the above works fine
  
  
  Queue<String> myQueue= new LinkedList<String>();
      myQueue.addFirst("Joe");
      System.out.println(myQueue);
    // does not work because Queue Interface doesn't have addFirst


   Queue<String> myQueue2= new PriorityQueue<String>();
    myQueue2.add("joe");
    myQueue2.add("tom");
    myQueue2.add("ann");
    System.out.println(myQueue2.remove());
    // the above works - but because you are being implemented by PriorityQueue
    // it will remove ann – works because PriorityQueue implements everything in Queue interface

ArrayList a = new ArrayList();
    a.add("Joe");
    System.out.println(a.get(0).length());
// will not compile because Objects don’t have lengths


ArrayList<String> a = new ArrayList();
    a.add("Joe");
    System.out.println(a.get(0).length());
// compiles and runs but with unsafe operations


ArrayList<String> a = new ArrayList<String>();
    a.add("Joe");
    System.out.println(a.get(0).length());
// compiles and runs fine