linkedlist.java

来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 265 行

JAVA
265
字号
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   LinkedList.java

package se.southend.drops.tools;


// Referenced classes of package se.southend.drops.tools:
//            List

public class LinkedList
    implements List
{
    private class ListNode
    {

        private ListNode prev;
        private ListNode next;
        private Object element;






        protected ListNode(Object element)
        {
            this.element = element;
        }
    }


    public LinkedList(int dummy)
    {
        this();
    }

    public LinkedList()
    {
        header = new ListNode(null);
        empty();
    }

    public LinkedList(Object element[])
    {
        this();
        add(element);
    }

    public Object get(int position)
    {
        if(position < 0 || position >= size)
        {
            return null;
        } else
        {
            setPointer(position);
            return current.element;
        }
    }

    public void set(Object obj, int i)
    {
    }

    public Object first()
    {
        return header.next.element;
    }

    public Object last()
    {
        return header.prev.element;
    }

    public void add(Object element)
    {
        ListNode tempcurrent = current;
        int temppointer = pointer;
        insert(element, size);
        current = tempcurrent;
        pointer = temppointer;
    }

    public void add(Object element[])
    {
        ListNode tempcurrent = current;
        int temppointer = pointer;
        insert(element, size);
        current = tempcurrent;
        pointer = temppointer;
    }

    public void insert(Object element, int index)
    {
        ListNode node = new ListNode(element);
        setPointer(index);
        node.prev = current.prev;
        current.prev.next = node;
        node.next = current;
        current.prev = node;
        pointer++;
        size++;
    }

    public void insert(Object elements[], int index)
    {
        for(int i = elements.length; i >= 0; i--)
            insert(elements[i], pointer);

    }

    public void remove(Object element)
    {
        int index = indexOf(element, 0);
        if(index >= 0)
            remove(index);
    }

    public void remove(int index)
    {
        if(size > 1)
        {
            setPointer(index);
            current.prev.next = current.next;
            current.next.prev = current.prev;
            current = current.next;
            size--;
        } else
        {
            empty();
        }
    }

    public void remove(int i, int j)
    {
    }

    public void empty()
    {
        current = header;
        header.next = header.prev = header;
        pointer = -1;
        size = 0;
    }

    public int size()
    {
        return size;
    }

    public boolean contains(Object element)
    {
        return indexOf(element, 0) >= 0;
    }

    public int indexOf(Object element)
    {
        return indexOf(element, 0);
    }

    public int indexOf(Object element, int fromIndex)
    {
        int index = 0;
        if(element == null)
        {
            for(ListNode n = header.next; n != header; n = n.next)
            {
                if(n.element == null && index >= fromIndex)
                    return index;
                index++;
            }

        } else
        {
            for(ListNode n = header.next; n != header; n = n.next)
            {
                if(element.equals(n.element) && index >= fromIndex)
                    return index;
                index++;
            }

        }
        return -1;
    }

    public int lastIndexOf(Object element)
    {
        return lastIndexOf(element, size - 1);
    }

    public int lastIndexOf(Object element, int fromIndex)
    {
        int index = size;
        if(element == null)
        {
            for(ListNode n = header.prev; n != header; n = n.prev)
            {
                index--;
                if(n.element == null && index <= fromIndex)
                    return index;
            }

        } else
        {
            for(ListNode n = header.prev; n != header; n = n.prev)
            {
                index--;
                if(element.equals(n.element) && index <= fromIndex)
                    return index;
            }

        }
        return -1;
    }

    public boolean isEmpty()
    {
        return size == 0;
    }

    public Object[] toArray()
    {
        Object result[] = new Object[size];
        return toArray(result, 0);
    }

    public Object[] toArray(Object result[], int offset)
    {
        for(int i = 0; i < size; i++)
            result[i] = get(i);

        return result;
    }

    private void setPointer(int position)
    {
        if(position != pointer)
        {
            if(size - position < position - pointer)
            {
                current = header;
                pointer = size;
            } else
            if(position < pointer - position)
            {
                current = header.next;
                pointer = 0;
            }
            for(; pointer < position; pointer++)
                current = current.next;

            for(; pointer > position; pointer--)
                current = current.prev;

        }
    }

    private int size;
    private int pointer;
    private ListNode header;
    private ListNode current;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?