All Downloads are FREE. Search and download functionalities are using the official Maven repository.

link.jfire.baseutil.collection.set.LightSet Maven / Gradle / Ivy

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