ObservableList - "Linked list" or "Dynamic array"?

I always assumed ObservableList (or more precisely, its implementation that is used to store child nodes) to be a linked list. Well, is it? :)
Thanks for reading!

stepan wrote:
Unfortunately, java.util.List is itself only an interface. What I'm concerned with is an actual implementation (i.e. data structure used).
Let me clarify my motivation by formulating the question more specifically: When dealing with an instance of ObservableList obtained by calling Parent's getChildren() method, will the get(int) method run in O(1) or O(size())? The latter would suggest it really may be a linked list...Previous answers mine included doesn't help much after I re-read your actual question :).
Barring an actual answer from the Source (One of the Oracle engineers) vs the Source (code.....) I found an answer to your question after digging around in the private packages for a bit. Children nodes to a Parent are initially created as an ArrayList. I suppose its possible that ArrayList could be replaced later by some other implementation of List during a Class's use at runtime (some corner use-case where LinkedList is favored for insertion speed) - but when they are born they are ArrayLists.
The javafx.scene.Parent class creates children as a VetoableObservableList()..
private final ObservableList children = new VetoableObservableList() {
};The constructor for class com.sun.javafx.collections.VetoableObservableList
public VetoableObservableList()
        super(new ArrayList());
    }

Similar Messages

  • Constructing a linked list from an array of integers

    How do I create a linked list from an array of 28 integers in a constructor? The array of integers can be of any value that we desire. However we must use that array to test and debug methods such as getFirst(), getLast(), etc...
    I also have a method int getPosition(int position) where its suppose to return an element at the specified position. However, I get an error that says cannot find symbol: variable data or method next()
    public int getPosition(int position){
         LinkedListIterator iter=new LinkedListIterator();
         Node previous=null;
         Node current=first;
         if(position==0)
         return current.data;
         while(iter.hasMore()){
         iter.next();
         if(position==1)
         return iter.data;
         iter.next();
         if(position==2)
         return iter.data;
         iter.next();
         if(position==3)
         return iter.data;
         iter.next();
         if(position==4)
         return iter.data;
         iter.next();
         if(position==5)
         return iter.data;
         iter.next();
         if(position==6)
         return iter.data;
         iter.next();
         if(position==7)
         return iter.data;
         iter.next();
         if(position==8)
         return iter.data;
         iter.next();
         if(position==9)
         return iter.data;
         iter.next();
         if(position==10)
         return iter.data;
         iter.next();
         if(position==11)
         return iter.data;
         iter.next();
         if(position==12)
         return iter.data;
         iter.next();
         if(position==13)
         return iter.data;
         iter.next();
         if(position==14)
         return iter.data;
         iter.next();
         if(position==15)
         return iter.data;
         iter.next();
         if(position==16)
         return iter.data;
         iter.next();
         if(position==17)
         return iter.data;
         iter.next();
         if(position==18)
         return iter.data;
         iter.next();
         if(position==19)
         return iter.data;
         iter.next();
         if(position==20)
         return iter.data;
         iter.next();
         if(position==21)
         return iter.data;
         iter.next();
         if(position==22)
         return iter.data;
         iter.next();
         if(position==23)
         return iter.data;
         iter.next();
         if(position==24)
         return iter.data;
         iter.next();
         if(position==25)
         return iter.data;
         iter.next();
         if(position==26)
         return iter.data;
         iter.next();
         if(position==27)
         return iter.data;
         iter.next();
         if(position==28)
         return iter.data;
         if(position>28 || position<0)
         throw new NoSuchElementException();
         }

    How do I create a linked list from an array of 28 integers
    in a constructor? In a LinkedList constructor? If you check the LinkedList class (google 'java LinkedList'), there is no constructor that accepts an integer array.
    In a constructor of your own class? Use a for loop to step through your array and use the LinkedList add() method to add the elements of your array to your LinkedList.
    I get an error that
    says cannot find symbol: variable data or method
    next()If you look at the LinkedListIterator class (google, wait for it...."java LinkedListIterator"), you will see there is no next() method. Instead, you typically do the following to get an iterator:
    LinkedList myLL = new LinkedList();
    Iterator iter = myLL.iterator();
    The Iterator class has a next() method.

  • Converting an array to a Linked list.

    I'm writing somewhat of a card game. One of the functions I'm supposed to have is the cut function. I'm supposed to split the deck into two and place the bottom half on top of the top half. My card objects are stored in Nodes in a programmer defined linked list. I believe I successfully converted the linked list into two array (top and bottom) but I am having problems with converting these back to LinkedList (atleast thats where I think my problem is) This is the code i had so far:
         public void cut()
              if (isEmpty())
                   throw new DeckException("Deck of Cards");
              else
                   int pivot = (int)(Math.random()*numCards);
                   Node top[] = new Node[pivot];
                   Node bottom[] = new Node[numCards-pivot];
                   Node traveller = front;
                            //Convert the linkedList into two arrays
                   for(int i = 0; i < numCards; i++)
                        if(i < pivot)
                             top[i] = traveller;
                             traveller = traveller.getNext();
                        else
                             bottom[i-pivot] = traveller;
                             traveller = traveller.getNext();
                            //Convert the two arrays back to a LinkedList, where bottom is put in the front of the list and top is put on the end
                   traveller = front;
                   for(int i = 0; i < numCards; i++)
                        if(i < bottom.length)
                                            //reference comment 1
                             traveller.setNext(bottom);
                             traveller = traveller.getNext();
                        else
    //reference comment 2
                             traveller.setNext(top[i-bottom.length]);
                             traveller = traveller.getNext();
         }I'm not really sure what I'm doing wrong but when i play around with the code I get alot of ArrayOutOfBounds error around the comment above marked as reference comment 1 and 2
    Can someone please give me guidance as to what I'm doing wrong? I feel as If I've reached a block i can't get past.
    EDIT: the variable numCards above should have the value 52
    Edited by: 806583 on Oct 31, 2010 11:12 PM

    My Node class is public. It does not implement the List Interface. This is my Node class:package project3;
    public class Node
      private Card data; //a reference to an object of type T
      private Node next; //the address of the next node in the list
       * default constructor - initializes data and next to null
      public Node()
           data = null;
           next = null;
       * parameterized constructor - initializes data to the user
       * specified value; next is set to null
       * @param newItem the value to be stored in the node
      public Node(Card newItem)
        data = newItem;
        next = null;
       * parameterized constructor - initializes data and next to user
       * specified values
       * @param newItem the object reference to be stored in the node
       * @param nextItem the reference to the next node in the list
      public Node(Card newItem, Node nextItem)
        data = newItem;
        next = nextItem;
       * setItem - stores a new value in data
       * @param newItem the object reference to be stored in the node
      public void setItem(Card newItem)
        data = newItem;
       * setNext - stores a new value in next
       * @param nextItem the reference to be stored in next
      public void setNext(Node nextItem)
        next = nextItem;
       * getItem - returns the reference stored in data
       * @return a reference to the data stored in the node
      public Card getItem()
        return data;
       * getNext - returns the reference stored in next
       * @return the reference stored in next
      public Node getNext()
        return next;
    }

  • Need help on creating a linked list with array...

    I want to create a linked listed using array method. Any suggestion on how would I start it.
    thanks

    That means I want to implement linked list using an
    array.I believe you mean you want to implement list using an array. Linked list is a very different implementation of a list, which can be combined with arrays for a niche implementation of list, but I don't think this is what you're talking about.
    Do you mind if we ask why you don't want to use ArrayList? It does exactly what you specify, plus it will increase the size of the internal array as necessary to ensure it can store the required elements.
    If you really want to make your own, have a look at the source for ArrayList (in src.jar in your JDK installation folder) - it will answer any questions you have. If you don't understand any of the code, feel free to post the relevant code here and ask for clarification.

  • Recursion using a linked list

    I am confused at how to make a linked list using recursion. I've been looking at the syntax and examples from the web for the past couple hours, but all seem to be based on an empty .java file. I need to put it in my code somehow. here's the code segment:
    public static boolean RecursiveTest (String s, int start, Node n) {
    // The linked list
    Node<char> bracket = new Node<char>();
    int size = s.length();
    char v = s.charAt(start);
    //String sElement = parens.top();
    boolean isGood = true;
    // ending "ifs"
    if (size == 0) { System.out.println("empty string");  return false; }
    if (start == size) return isGood;
    if (s.charAt(start) == '(' || s.charAt(start) == '[' ||
              s.charAt(start)== '{') {
    v.Push(sChar);
    System.out.println(sChar);
    return RecursiveTest(start+1, s.charAt(start));
    else if (sChar.equals(")") && sElement.equals("(")) {
    parens.Pop();
    System.out.println(sChar);
    return RecursiveTest(start+1);
    else if (sChar.equals("]") && sElement.equals("[")) {
    parens.Pop();
    System.out.println(sChar);
    return RecursiveTest(start+1);
    else if (sChar.equals("}") && sElement.equals("{")) {
    parens.Pop();
    System.out.println(sChar);
    return RecursiveTest(start+1);
    else if (sChar.equals(")") && !sElement.equals("(")) {
    System.out.println("bad");
    isGood = false;
    return isGood;
    else if (sChar.equals("]") && !sElement.equals("[")) {
    System.out.println("bad");
    isGood = false;
    return isGood;
    else if (sChar.equals("}") && !sElement.equals("{")) {
    System.out.println("bad");
    isGood = false;
    return isGood;
    else return RecursiveTest(start+1);
    } // end of RecursiveTest
    I'm passing a string, 0, and a new node (i dunno about the last one there), from an above main class.
    This code is wrong, i know, but it's all I got done so far. How would I be able to make a linked list inside this method?

    No one knows how to do a linked list inside a recursive method?Yes we do, but you have to realize that a list (whether it be a linked list
    or an array list or whatever) has nothing to do with recursion per se.
    If that list has to keep track of some state it certainly mustn't be created
    within that recursive method as a local variable. And (see my previous
    reply), what do you need recursion for? Counting and pairing brackets
    can easily be done using an iterative method where the list keeps track
    of the last seen left bracket (of any type).
    kind regards,
    Jos

  • N^2 log(n) for Collections.sort() on a linked list in place?

    So, I was looking over the Java API regarding Collections.sort() on linked lists, and it says it dumps linked lists into an array so that it can call merge sort. Because, otherwise, sorting a linked list in place would lead to a complexity of O(n^2 log n) ... can someone explain how this happens?

    corlettk wrote:
    uj,
    ... there are other sorting methods for linked lists with an O(N*N) complexity.Please, what are those algorithms? I'm guesing they're variants off insertion sort, coz an insertion is O(1) in a linked list [and expensive in array]... Am I warm?You don't have to change the structure of a linked list to sort it. You can use an ordinary Bubblesort. (The list is repeatedly scanned. In each scan adjacent elements are compared and if they're in wrong order they're swapped. When one scan of the list passes without any swaps the list is sorted). This is an O(N*N) algoritm.
    What I mean is it's possible to sort a list with O(N*N) complexity. It doesn't have to be O(N*N*logN) as the Java documentation kind of suggests. In fact I wouldn't be surprised if there were special O(N*logN) algoritms available also for lists but I don't know really. In any case Java uses none of them.

  • How to implement a linked list in oracle ?

    HI All
    I want to know if there a way to implement a linked list in oracle ?
    Thanks in Advanced
    Naama

    A linked list is an array of the relevant data plus an indicator of the next and previous entries, right?
    Sounds easily achievable with any of the plsql collection types.
    The simplest would be a plsql associative array of a record
    Assignments of records in collections is always a bit hamfisted compared to sql objects types though (IMO).
    Something like ?
    DECLARE
    TYPE r_payload IS RECORD
    (col1 number,
      col2 number);
    TYPE r_array_entry is RECORD
    (prev_entry PLS_INTEGER,
      next_entry PLS_INTEGER,
      payload    r_payload);
    TYPE t_array IS TABLE OF r_array_entry INDEX BY PLS_INTEGER;
    v_array t_array;
    BEGIN
    NULL;
    END; 
      The use case for such a structure in properly coded SQL & PL/SQL is possibly the harder question.

  • Help on Linked List

    Hey people, i need a small help on my linked list.
    Ok, what i'm trying to do is have a search function with a linked list using strings. First i will have a string, i will then compute the ASCII value for that and take MOD 71 lets say. For example, a string has an ASCII value of 216, MOD 71 of this gives me 3. I will then have an array of 71, and each array will point to a linked list. There will be as many linked list as there are of arrays (71). I will then store this string at index [3] in the linked list in which the array points to.
    My problem for now is, how do i for example create 71 linked list? So far i can create only 1. To create another is easy, but if i have 71 the code will be too much. Is there an iterator i could use that easily creates 71? Sorry about this, i'm not really good with linked list with Java. Anyway, here is what i have now :).
    public class MyLinkedListElement {   
            String string;
            MyLinkedListElement next;
            public MyLinkedListElement(String s) {   
                string = s;
                next = null;   
            public MyLinkedListElement getNext() {
                return next;       
            public String getValue() {
                return string;
    public class MyLinkedList {
        public static MyLinkedListElement head;
        public MyLinkedList() {   
            head = null;
       public static void addToHead(String s) {
            MyLinkedListElement a = new MyLinkedListElement(s);
            if (head == null) {
                head = a;
            } else {
                a.next = head;
                head = a;       
        public static void main(String[] args) {
              String[] arr = {"Bubble", "Angie", "Bob", "Bubble", "Adam"};
              for (int i = 0; i < arr.length; i++) {
                          addToHead(arr);
    MyLinkedListElement current = head;
    while (current != null) {
    System.out.println(current.getValue());
    current = current.next;
    }I can have an array of strings and easily add them to a linked list.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

    I am very confused now, i just need to store a string value inside an array of linked list. But i can't somehow do it. I am very close, i can store the value in a linked list but the array of linked list, this is what i have.
    public class MyLinkedListElement {   
            String string;
            MyLinkedListElement next;
            public MyLinkedListElement(String s) {   
                string = s;
                next = null;   
            public MyLinkedListElement getNext() {
                return next;       
            public String getValue() {
                return string;
    public class MyLinkedList {
        public MyLinkedListElement head;
        public MyLinkedList() {   
              head = null;
        public void addToHead(String s) {
             MyLinkedListElement  a = new MyLinkedListElement(s);
             MyLinkedList[] arrayOfLinkedLists = new MyLinkedList[71];
             for(int i = 0; i < arrayOfLinkedLists.length; i++) {
                 arrayOfLinkedLists[i] = new MyLinkedList();
             if (head == null) {    
                 head = a;
             } else {
                 a.next = head;
                 head = a;       
        public void print(MyLinkedListElement current) {
              while (current  != null) {
                    System.out.println(current.getValue());
                    current = current.next;
        public static void main(String[] args) {
              String[] arr = {"Bubble", "Angie", "Bob", "Bubble", "Adam"};
              MyLinkedList listInstance = new MyLinkedList();
              for (int i = 0; i < arr.length; i++) {
                    listInstance.addToHead(arr);
    MyLinkedListElement current = listInstance.head;
    listInstance.print(current);

  • Linked lists in labview

    Hi
    I want to create a linked list in labview. How can i do that in labview?
    If its not possible how can i implement in labview?

    I'd say one of the best implementations of a linked list is an Array of DVR's, just like you can have an array of pointers in C, the next and previous is ofc the place in the array. The question if ofc what you're trying to achieve.
    A "pure linked list" require a Cluster with a Next and Previous-DVR (or the name of a queue, though i dont know how the system would handle having thousands of 1-element queues) and either a Self-DVR or the information.
    /Y
    LabVIEW 8.2 - 2014
    "Only dead fish swim downstream" - "My life for Kudos!" - "Dumb people repeat old mistakes - smart ones create new ones."
    G# - Free award winning reference based OOP for LV

  • Re: array of references to linked lists

    Hi, im having a little problem seeing the wood from the tree...shouldnt be too hard for a fresh pair of eyes...ive been trying for a while now(read ages !!).
    I have an array which will be populated with seperate linked lists (StudentList class) which are populated from a console interface (prompt).
    It seems to work fine, however .. each list entered will overwrite the last by adding itself to it. eg :
    list 1 is added : adam 998 albert 999
    list 2 is added : john 123 jill 666
    lists[0].print() : jill 666 john 123 albert 999 adam 998
    lists[1].print() : jill 666 john 123 albert 999 adam 998
    it should give
    lists[0].print() : jill 666 john 123
    lists[1].print() : albert 999 adam 998
    the code is below,
    cheers for ANY help,
    ta.
    import java.io.*;
    import java.util.*;
    public class StudentId {
         public static void main(java.lang.String[] args) {
              StudentList[] lists = new StudentList[20];
              for (int i = 0; i < lists.length; i++) {
                   lists[i] = new StudentList();
              int n = 0;
              BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
              for(;;) {
                   System.out.print("Please enter a student record list> ");
                   try {
                        //StudentList list = new StudentList();
                        String line = in.readLine();
                        if (line.equals("quit")) {
                             break;
                        StringTokenizer tokenBag = new StringTokenizer (line," ");
                        while (tokenBag.hasMoreTokens()) {
                             try {
                                  String name = tokenBag.nextToken();
                                  String idString = tokenBag.nextToken();
                                  int id = Integer.parseInt(idString);
                                  lists[n].insert(name, id);
                             catch(Exception e) {
                                  System.out.println("Input error : " + e);
                   catch (Exception e) {
                        System.out.println("exception : " + e);
                   n += 1;
              for (int i=0; i<n; i++) {
                   System.out.println("element " + i);
                   lists.print();

    other class (Int node class is standard node class altered
    public class StudentList {
         private static IntNode head;
         private static int count;
         public StudentList() {
              head = null;
              count = 0;
         public boolean isEmpty() {
              if (count == 0) return true;
              else return false;
         public int size(){
              return count;
        public IntNode getHead() {
              return head;
         public void printHead() {
              System.out.println(head.getName() + " " + head.getId());
         public IntNode getTail() {
              IntNode cursor;
              for (cursor = head; cursor != null; cursor = cursor.getLink()) {
              return cursor;
         public void insert(String name, int id){
              head = new IntNode(name, id ,head);
              count++;
         public IntNode searchFor(String name) {
              IntNode cursor;
              cursor = head.listSearch(head, name);
              return cursor;
         public IntNode searchFor(int id) {
              IntNode cursor;
              cursor = head.listSearch(head, id);
              return cursor;
         public void print() {
              IntNode cursor = head;
              for (int i=0; i<count; i++) {
                   System.out.println(cursor.getName()+" "+cursor.getId());
                   cursor = cursor.getLink();
         public void insertListBefore(IntNode match, StudentList list) {
              IntNode preCursor = head.getPrevious(head, match);
              IntNode cursor;
              cursor = this.searchFor(match.getName());
              preCursor.setLink(list.getHead());
              list.getTail().setLink(cursor);
    }

  • Array of Linked List Help

    I am fairly new to Java, and Linked Lists. Can you tell me how I can fix my code? Why does my code print infinite "3" s. That is all I am trying to do is create a linked list and put that linked list into index 2 of the array. In the loop, I am setting up a whole bunch on null Node's, is it even possible to link all these nodes together in that same loop? If something does not make sense, I will try to elaborate. I will eventually impliment an insert method in the Node class, are there any pointers on how to implement it? What are the special cases I need to be looking for when implementing the insert method?
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    package testlinkedlist;
    * @author Ben
    public class Main {
         * @param args the command line arguments
        public static Node l;
        public static Node p = new Node();
        public static Node Front;
        public static void main(String[] args) {
            Node[] anArray = new Node[4];
            for(int i = 0; i < 4; i++){
                anArray[i] = new Node();
                l = new Node(i);
                l.setLink(l);
            anArray[2] = l;         
            while(anArray[2] != null){
                System.out.println(anArray[2].dataInNode());
                anArray[2] = anArray[2].next;
    }

    l = new Node(i);
    l.setLink(l);The node l is created in line one, in line two a link is created from l to l. In other words here is the presence of your infinite loop which is magnified in the following piece of code:
    anArray[2] = l;         
    while(anArray[2] != null){
      System.out.println(anArray[2].dataInNode());
      anArray[2] = anArray[2].next;
    }Mel

  • Linked Lists with Arrays

    I am setting up a linked list of the following very simplified class:
    class LinkedList
         String Name=" ";
         double ID=0;
         static long next=0;
    }the main class is as follows:
    class Links
         public static void Display(LinkedList Link)
         /** A Display function that simply displays everything within the LinkedList class*/
         System.out.println("\nName: " + Link.Name +"\nID  #: " + Link.ID + "\nNext ID: " + Link.next);
         public static void main(String[] args)
              int MAX_LINKS=10;
              LinkedList[] Link=new LinkedList[MAX_LINKS];
              for (int i=0;i<MAX_LINKS;i++)
                   Link.ID=i;
                   Link[i].next++;
                   Display(Link[i]);
    everything compiles fine, but at runtime I recieve a
    Exception in thread "main" java.lang.NullPointerException
    at Links.Display(Links.java:6)
    at Links.main(Links.java:18)What am I doing wrong?
    Thanks in advance.

    public static void main(String[] args){
       int MAX_LINKS=10;
    // this tells the compiler that the Link array will hold
    //LinkedList objects, but doesn't actually create those objects...
       LinkedList[] Link=new LinkedList[MAX_LINKS];
       for (int i=0;i<MAX_LINKS;i++){
    //NEED TO ADD THIS LINE to create the objects:
          Link[ i ] = new LinkedList();
          Link[ i ].ID=i;
          Link[ i ].next++;
          Display(Link[ i ]);

  • Linked List and String Resources

    Linked Lists can be very slow when removing dynamic Strings.
    If you add and remove Strings in the
    following way, the performance is very poor:
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new LinkedList();
    for (int i = 0 ; i < n ; i++)
    list.add ("" + n);
    for (int i = n-1 ; i >= 0 ; i--)
    list.remove(i/2);
    - If you add and remove the not dynamic String: "" + 10000 instead,
    - or do not remove the String (but add it in the middle),
    - or use a ArrayList
    the performance is much better.
    I suppose it depends on handling the String resources.
    If you run the following class, you will see what I mean:
    public class SlowLinkedList
    public static void main (String[] args)
    // Be carefull when accessing/removing Strings in a Linked List.
    testLinkedList ();
    testLinkedListHardCodedString();
    testLinkedListNoRemove();
    testArrayList();
    testArrayListNoParam();
    private static void testLinkedList ()
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new LinkedList();
    for (int i = 0 ; i < n ; i++)
    list.add ("" + n);
    for (int i = n-1 ; i >= 0 ; i--)
    list.remove(i/2);
    time = System.currentTimeMillis () - time;
    System.out.println ("time dynamic String remove " + time);
    private static void testLinkedListHardCodedString ()
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new LinkedList();
    for (int i = 0 ; i < n ; i++)
    list.add ("" + 10000);
    for (int i = n-1 ; i >= 0 ; i--)
    list.remove(i/2);
    time = System.currentTimeMillis () - time;
    System.out.println ("time same String remove " + time);
    private static void testLinkedListNoRemove ()
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new LinkedList();
    for (int i = 0 ; i < n ; i++)
    list.add (i/2, "" + n);
    time = System.currentTimeMillis () - time;
    System.out.println ("time add dynamic String " + time);
    private static void testArrayList ()
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new ArrayList();
    for (int i = 0 ; i < n ; i++)
    list.add ("" + n);
    for (int i = n-1 ; i >= 0 ; i--)
    list.remove(i/2);
    time = System.currentTimeMillis () - time;
    System.out.println ("time ArrayList " + time);
    private static void testArrayListNoParam ()
    int n = 10000;
    long time = System.currentTimeMillis ();
    List list = new ArrayList ();
    for (int i = 0 ; i < n ; i++)
    list.add ("" + 10000);
    for (int i = n-1 ; i >= 0 ; i--)
    list.remove(i/2);
    time = System.currentTimeMillis () - time;
    System.out.println ("time ArrayList same String " + time);
    A typic output of the Performance is:
    time dynamic String remove 1938
    time same String remove 312
    time add dynamic String 31
    time ArrayList 63
    time ArrayList same String 31

    begin long winded reply
    It doesn't matter if they are Strings or any other Object. LinkedList, in the way you are executing
    remove, is not effecient. The LinkList remove will look at the index, if it is less than the median
    it will start iterating from 0, if it is greater, it will start iterating in reverse from the end. Since you
    are removing from the median, it will always take the longest (either forward or backward) to
    get to the middle. Whereas, ArrayList simply uses the arraycopy to drop the element from the
    array. The "NoRemove" test doesn't make sense to me in relation to the others.
    Also, the VM is performing optimizations when you hardcode the 'n' value to 10000, it seems
    that the VM won't optimize when using 'n'. Tusing Integer.toString(n), instead of "" + n,
    in the first test case, it will yield better results.
    My profs in college drove collections into my head and removing from a linked list without
    an iterator is going to be inefficient. Iterators are a beautiful thing, use them.
    Try this code instead, it simulates your remove in the middle with an iterator and, on my
    machine, is faster than the ArrayList.
    private static void testLinkedList() {
        int n = 10000;
        long time = System.currentTimeMillis ();
        List list = new LinkedList();
        for (int i = 0 ; i < n ; i++) {
            list.add (Integer.toString(n));
        boolean forward = false;
        for (ListIterator li = list.listIterator(n >> 1); li.hasNext() || li.hasPrevious();) {
            if (forward) {
                li.next();
                forward = false;
            } else {
                li.previous();
                forward = true;
            li.remove();
        time = System.currentTimeMillis () - time;
        System.out.println ("time dynamic String remove " + time);
    }One other thing, run the tests more than once in a single VM and take the average. You could
    apply some statistical analysis to figure out which is better within a certain confidence percentage,
    but that is probably overkill. :)
    Check the collection tutorial for more info: http://java.sun.com/docs/books/tutorial/collections/implementations/general.html
    end long winded reply
    Matt

  • After Delete in Linked list...unable to display the linked list

    Hi...i know that there is an implementation of the class Linked Link but i am required to show how the linked list works in this case for my project...please help...
    Yes..I tried to delete some objects in a linked list but after that i am not able to display the objects that were already in the linked list properly and instead it throws an NullPointerException.
    Below shows the relevant coding for deleting and listing the linked list...
    public Node remove(Comparator comparer) throws Exception {
         boolean found = false;
         Node prevnode = head;          //the node before the nextnode
         Node deletedNode = null;     //node deleted...
         //get next node and apply removal criteria
         for(Node nextnode = head.getNextNode(); nextnode != null; nextnode = nextnode.getNextNode()) {
              if(comparer.equals(nextnode)) {
                   found = true;
                   //remove the next node from the list and return it
                   prevnode.setNextNode(nextnode.getNextNode());
                   nextnode.setNextNode(null);
                   deletedNode = nextnode;
                   count = count - 1;
                   break;
         if (found) return deletedNode;
         else throw new Exception ("Not found !!!");
    public Object[] list() {
         //code to gather information into object array
         Node node;
         Object[] nodes = new Object[count];
         node = head.getNextNode();
         for (int i=0; i<count; i++) {
              nodes[i] = node.getInformation();  // this is the line that cause runtime error after deleting...but before deleting, it works without problem.
              node = node.getNextNode();
         return nodes;
    }Please help me in figuring out what went wrong with that line...so far i really can't see any problem with it but it still throws a NullPointerException
    Thanks

    OK -- I've had a cup and my systems are coming back on line...
    The problem looks to be the way that you are handling the pointer to the previous node in your deletion code. Essentially, that is not getting incremented along with the nextNode -- it is always pointing to head. So when you find the node to delete then the line
       prevnode.setNextNode(nextnode.getNextNode());will set the nextNode for head to be null in certain situations (like if you are removing the tail, for instance).
    Then when you try to print out the list, the first call you make is
    node = head.getNextNode();Which has been set to null, so you get an NPE when you try to access the information.
    Nothing like my favorite alkaloid to help things along on a Monday morning...
    - N

  • Is there a way to create a "Horizontal Links List" from a query?

    Hi,
    Is there a way to create a "Horizontal Links List" from a query?
    I want to display file names that I have uploaded as links to a display page.
    I don't know how to create my own template yet as I've read... I saw Jes had posted this idea...
    Thanks, Bill

    Yes, that is great Chris!
    Thanks for the site....
    Once I dynamically create the HTML for the list how do I feed it into the page?
    as an item? Can I access an HTML region body dynamically?
    Thanks, Bill

Maybe you are looking for