import java.util.*;
//------------------------------------------------------------------------------
//Creating, and using a LinkedList. 
//You can insert at the beginning, end, or middle 
//------------------------------------------------------------------------------

@SuppressWarnings("unchecked")          //annotation to suppress compile warnings

public class linkedList1 
{
    public static void main(String[] args) 
    {
        LinkedList llist = new LinkedList();
 
        llist.add(2);                           //add to end --> element 0
        llist.add("Sam");                       //add to end --> element 1 
        llist.add(true);                        //add to end --> element 2

        System.out.println(llist);              //print entire list

        llist.add(1, "a");                      //add element 1. value "a"
        llist.add("John");                      //add to end
//      llist.add(6, false);                    //not OK. Element 6 is outside of bound
        llist.add(5, false);                    //add element 5. value false 

        System.out.println(llist);              //print entire list

        llist.addFirst("begin");                //add element 0.  
        llist.addLast("end");                   //add to end

        System.out.println(llist);              //print entire list

        llist.set(6, "Steve");                  //change element 6 -> Steve
        llist.set(llist.size()-1, "The end");   //change last element -> The end

        System.out.println(llist);              //print entire list

        llist.remove(5);                        //remove element 5
        llist.remove("Sam");                    //remove elemnt with content "Sam"

        System.out.println(llist);              //print entire list
        System.out.println();
    
        //Using the for loop ---------------------------------------------------

        for (int i=0; i<llist.size(); i++)
        {
            Object item = llist.get(i);     //what type is it ???
                                            //to manipulate, must (cast) appropriately
            System.out.println(item);       
        }
        System.out.println();

        //Using the enhanced for loop ------------------------------------------

        for (Object item : llist)
        {
            System.out.println(item);
        }
    }
}