KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > Yasna > util > LinkedList


1 /**
2  * $RCSfile: LinkedList.java,v $
3  * $Revision: 1.3 $
4  * $Date: 2006/01/07 00:21:06 $
5  *
6  * Copyright (C) 2000 CoolServlets.com. All rights reserved.
7  *
8  * ===================================================================
9  * The Apache Software License, Version 1.1
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in
20  * the documentation and/or other materials provided with the
21  * distribution.
22  *
23  * 3. The end-user documentation included with the redistribution,
24  * if any, must include the following acknowledgment:
25  * "This product includes software developed by
26  * CoolServlets.com (http://www.Yasna.com)."
27  * Alternately, this acknowledgment may appear in the software itself,
28  * if and wherever such third-party acknowledgments normally appear.
29  *
30  * 4. The names "Jive" and "CoolServlets.com" must not be used to
31  * endorse or promote products derived from this software without
32  * prior written permission. For written permission, please
33  * contact webmaster@Yasna.com.
34  *
35  * 5. Products derived from this software may not be called "Jive",
36  * nor may "Jive" appear in their name, without prior written
37  * permission of CoolServlets.com.
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  * ====================================================================
52  *
53  * This software consists of voluntary contributions made by many
54  * individuals on behalf of CoolServlets.com. For more information
55  * on CoolServlets.com, please see <http://www.Yasna.com>.
56  */

57
58 package com.Yasna.util;
59
60 import java.util.*;
61
62 /**
63  * Simple LinkedList implementation. The main feature is that list nodes
64  * are public, which allows very fast delete operations (when one has a
65  * reference to the node that is to be deleted).<p>
66  *
67  * The linked list implementation was specifically written for the CoolServlets
68  * cache system. While it can be used as a general purpose linked list, for
69  * most applications, it is more suitable to use the linked list that is part
70  * of the Java Collections package.
71  */

72 public class LinkedList {
73
74     /**
75      * The root of the list keeps a reference to both the first and last
76      * elements of the list.
77      */

78     private LinkedListNode head = new LinkedListNode("head", null, null);
79
80     /**
81      * Creates a new linked list.
82      */

83     public LinkedList() {
84         head.next = head.previous = head;
85     }
86
87     /**
88      * Returns the first linked list node in the list.
89      *
90      * @return the first element of the list.
91      */

92     public LinkedListNode getFirst() {
93         LinkedListNode node = head.next;
94         if (node == head) {
95             return null;
96         }
97         return node;
98     }
99
100     /**
101      * Returns the last linked list node in the list.
102      *
103      * @return the last element of the list.
104      */

105     public LinkedListNode getLast() {
106         LinkedListNode node = head.previous;
107         if (node == head) {
108             return null;
109         }
110         return node;
111     }
112
113     /**
114      * Adds a node to the beginning of the list.
115      *
116      * @param node the node to add to the beginning of the list.
117      */

118     public LinkedListNode addFirst(LinkedListNode node) {
119         node.next = head.next;
120         node.previous = head;
121         node.previous.next = node;
122         node.next.previous = node;
123         return node;
124     }
125
126     /**
127      * Adds an object to the beginning of the list by automatically creating a
128      * a new node and adding it to the beginning of the list.
129      *
130      * @param object the object to add to the beginning of the list.
131      * @return the node created to wrap the object.
132      */

133     public LinkedListNode addFirst(Object JavaDoc object) {
134         LinkedListNode node = new LinkedListNode(object, head.next, head);
135         node.previous.next = node;
136         node.next.previous = node;
137         return node;
138     }
139
140     /**
141      * Adds an object to the end of the list by automatically creating a
142      * a new node and adding it to the end of the list.
143      *
144      * @param object the object to add to the end of the list.
145      * @return the node created to wrap the object.
146      */

147     public LinkedListNode addLast(Object JavaDoc object) {
148         LinkedListNode node = new LinkedListNode(object, head, head.previous);
149         node.previous.next = node;
150         node.next.previous = node;
151         return node;
152     }
153
154     /**
155      * Erases all elements in the list and re-initializes it.
156      */

157     public void clear() {
158         //Remove all references in the list.
159
LinkedListNode node = getLast();
160         while (node != null) {
161             node.remove();
162             node = getLast();
163         }
164
165         //Re-initialize.
166
head.next = head.previous = head;
167     }
168
169     /**
170      * Returns a String representation of the linked list with a comma
171      * delimited list of all the elements in the list.
172      *
173      * @return a String representation of the LinkedList.
174      */

175     public String JavaDoc toString() {
176         LinkedListNode node = head.next;
177         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
178         while (node != head) {
179             buf.append(node.toString()).append(", ");
180             node = node.next;
181         }
182         return buf.toString();
183     }
184 }
185
Popular Tags