Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2014-2015 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  * either express or implied. See the License for the specific language
  * governing permissions and limitations under the License.
  */
 package org.lastaflute.di.helper.timer;
 

Author(s):
modified by jflute (originated in Seasar)
 
 public class TimeoutLinkedList implements CloneableExternalizable {
 
     static final long serialVersionUID = 1L;
 
     private transient Entry header = new Entry(nullnullnull);
 
     private transient int size = 0;
 
     public TimeoutLinkedList() {
         . = . = ;
     }
 
     public Entry getFirstEntry() {
         if (isEmpty()) {
             return null;
         }
         return .;
     }
 
     public Object getFirst() {
         if (isEmpty()) {
             throw new NoSuchElementException();
         }
         return getFirstEntry().;
     }
 
     public Entry getLastEntry() {
         if (isEmpty()) {
             return null;
         }
         return .;
     }
 
     public Object getLast() {
         if (isEmpty()) {
             throw new NoSuchElementException();
         }
         return getLastEntry().;
     }
 
     public Object removeFirst() {
         if (isEmpty()) {
             throw new NoSuchElementException();
         }
         Object first = ..;
         ..remove();
         return first;
     }
 
     public Object removeLast() {
         if (isEmpty()) {
             throw new NoSuchElementException();
         }
         Object last = ..;
         ..remove();
         return last;
     }
 
     public void addFirst(final Object o) {
         ..addBefore(o);
     }
 
     public void addLast(final Object o) {
         .addBefore(o);
     }
 
     public void add(final int indexfinal Object element) {
         getEntry(index).addBefore(element);
     }
 
     public int size() {
         return ;
     }
    public boolean isEmpty() {
        return  == 0;
    }
    public boolean contains(final Object o) {
        return indexOf(o) != -1;
    }

    
要素を削除します。

Parameters:
o
Returns:
削除されたかどうか
    public boolean remove(final Object o) {
        if (o == null) {
            for (Entry e = .e != e = e._next) {
                if (e._element == null) {
                    e.remove();
                    return true;
                }
            }
        } else {
            for (Entry e = .e != e = e._next) {
                if (o.equals(e._element)) {
                    e.remove();
                    return true;
                }
            }
        }
        return false;
    }

    
指定した位置の要素を削除します。

Parameters:
index 位置
Returns:
削除された要素
    public Object remove(final int index) {
        Entry e = getEntry(index);
        e.remove();
        return e._element;
    }

    
要素を空にします。
    public void clear() {
        . = . = ;
         = 0;
    }

    
エントリを返します。

Parameters:
index
Returns:
エントリ
    public Entry getEntry(final int index) {
        if (index < 0 || index >= ) {
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + );
        }
        Entry e = ;
        if (index <  / 2) {
            for (int i = 0; i <= indexi++) {
                e = e._next;
            }
        } else {
            for (int i = i > indexi--) {
                e = e._previous;
            }
        }
        return e;
    }

    
要素を返します。

Parameters:
index 位置
Returns:
要素
    public Object get(final int index) {
        return getEntry(index).;
    }

    
要素を設定します。

Parameters:
index
element
Returns:
元の要素
    public Object set(final int indexfinal Object element) {
        Entry e = getEntry(index);
        Object oldVal = e._element;
        e._element = element;
        return oldVal;
    }

    
位置を返します。

Parameters:
o 要素
Returns:
位置
    public int indexOf(final Object o) {
        int index = 0;
        if (o == null) {
            for (Entry e = .e != e = e._next) {
                if (e._element == null) {
                    return index;
                }
                index++;
            }
        } else {
            for (Entry e = .e != e = e._next) {
                if (o.equals(e._element)) {
                    return index;
                }
                index++;
            }
        }
        return -1;
    }
    public void writeExternal(final ObjectOutput sthrows IOException {
        s.writeInt();
        for (Entry e = .e != e = e._next) {
            s.writeObject(e._element);
        }
    }
    public void readExternal(ObjectInput sthrows IOExceptionClassNotFoundException {
        int size = s.readInt();
         = new Entry(nullnullnull);
        . = . = ;
        for (int i = 0; i < sizei++) {
            addLast(s.readObject());
        }
    }
    public Object clone() {
        TimeoutLinkedList copy = new TimeoutLinkedList();
        for (Entry e = .e != e = e._next) {
            copy.addLast(e._element);
        }
        return copy;
    }

    
配列に変換します。

Returns:
配列
    public Object[] toArray() {
        Object[] result = new Object[];
        int i = 0;
        for (Entry e = .e != e = e._next) {
            result[i++] = e._element;
        }
        return result;
    }

    
要素を格納するエントリです。
    public class Entry {
        private Object _element;
        private Entry _next;
        private Entry _previous;
        Entry(final Object elementfinal Entry nextfinal Entry previous) {
             = element;
             = next;
             = previous;
        }

        
要素を返します。

Returns:
要素
        public Object getElement() {
            return ;
        }

        
次のエントリを返します。

Returns:
次のエントリ
        public Entry getNext() {
            if ( != TimeoutLinkedList.this.) {
                return ;
            }
            return null;
        }

        
前のエントリを返します。

Returns:
前のエントリ
        public Entry getPrevious() {
            if ( != TimeoutLinkedList.this.) {
                return ;
            }
            return null;
        }

        
要素を削除します。
        public void remove() {
            . = ;
            . = ;
            TimeoutLinkedList.this.--;
        }

        
前に追加します。

Parameters:
o 要素
Returns:
追加されたエントリ
        public Entry addBefore(final Object o) {
            Entry newEntry = new Entry(othis);
            . = newEntry;
             = newEntry;
            TimeoutLinkedList.this.++;
            return newEntry;
        }
    }
New to GrepCode? Check out our FAQ X