
link.jfire.baseutil.collection.set.LightSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jfire-baseutil Show documentation
Show all versions of jfire-baseutil Show documentation
jfire-baseutil is common jar dependency of jfire J2EE package
The newest version!
package link.jfire.baseutil.collection.set;
import java.lang.reflect.Array;
import java.util.Iterator;
/**
* 轻量级的链表类
*
* @author 林斌([email protected])
*
* @param
*/
public class LightSet implements Iterable
{
private Node head = new Node(null, null);
private int size = 0;
private Node end = null;
/**
* 将数组中所有的数据加入set中
*
* @param values
*/
public void addAll(T[] values)
{
for (T each : values)
{
addValue(each);
}
}
/**
* 该set是否为空
*
* @return
*/
public boolean isEmpty()
{
return head.next() == null;
}
/**
* 将另外一个set的数据加入自身中
*
* @param set
*/
public void addAll(LightSet set)
{
if (set.size() == 0)
{
return;
}
if (end == null)
{
head.setNext(set.getHead().next());
end = set.getEnd();
}
else
{
end.setNext(set.getHead().next());
end = set.getEnd();
}
size += set.size();
}
public void addValue(T value)
{
if (end == null)
{
Node node = new Node(value);
head.setNext(node);
end = node;
}
else
{
Node node = new Node(value);
end.setNext(node);
end = node;
}
size++;
}
public void add(T value)
{
addValue(value);
}
public void removeValue(Object value)
{
Node pre = head;
Node target = head.next();
while (target != null)
{
if (target.value() == value)
{
if (end == target)
{
end = pre;
pre.setNext(null);
}
else
{
pre.setNext(target.next());
}
size--;
break;
}
pre = target;
target = target.next();
}
}
public void removeNode(Node node)
{
Node pre = head;
Node target = head.next();
while (target != null)
{
if (target == node)
{
if (target == end)
{
end = pre;
pre.setNext(null);
}
else
{
pre.setNext(target.next());
}
size--;
break;
}
pre = target;
target = target.next();
}
}
public Node getHead()
{
return head;
}
/**
* 将链表内的数据以数组的形式返回
*
* @return
*/
public T[] toArray(Class type)
{
@SuppressWarnings("unchecked")
T[] result = (T[]) Array.newInstance(type, size);
int index = 0;
Node node = head;
while ((node = node.next()) != null)
{
result[index] = node.value();
index++;
}
return result;
}
public int size()
{
return size;
}
/**
* 删除所有的内容
*/
public void removeAll()
{
head.setNext(null);
end = null;
size = 0;
}
@Override
public Iterator iterator()
{
return new SetIterator(this);
}
public Node getEnd()
{
return end;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy