13_集合(Set)

2020-09-06  本文已影响0人  伶俐ll
集合的特点

不存放重复的元素

集合的用处

常用于去重

集合的接口设计

注意:集合重复元素,所以没有索引的概念

集合的实现
使用链表实现
/**
 * 集合 —— 链表实现
 */

package Set;

public class LZLinkedListSet<E> {

    private LZLinkedList<E> list = new LZLinkedList<>();

    public int size(){
        return list.size();
    }

    public boolean isEmpty(){
        return list.isEmpty();
    }

    public void clear(){
        list.clear();
    }

    public boolean contains(E element){
        return list.contains(element);
    }

    public void add(E element){
        int index = list.indexOf(element);
        if (index == list.ELEMENT_NOT_FOUND){
            list.add(element);
        }else {
            list.set(index,element);
        }
    }

    public void remove(E element){
        int index = list.indexOf(element);
        if (index != list.ELEMENT_NOT_FOUND){
            list.remove(index);
        }
    }

    public void traveral(Visitor<E> visitor){
        if (visitor == null) return;
        int size = list.size();
        for (int i = 0;i<size;i++){
            if (visitor.visit(list.get(i))) return;;
        }

    }

    public static abstract class Visitor<E> {
        public abstract boolean visit(E element);
    }

}

使用Map(Map内部采用红黑树实现)实现

LZTreeMap类代码见下一篇文章

package Set;

public class LZTreeSet2<E> {

    private LZTreeMap<E,Object> treeMap = new LZTreeMap<>();

    public int size(){
        return treeMap.size();
    }

    public boolean isEmpty(){
        return treeMap.isEmpty();
    }

    public void clear(){
        treeMap.clear();
    }

    public boolean contains(E element){
        return treeMap.containsKey(element);
    }

    public void add(E element){
        treeMap.put(element,null);
    }

    public void remove(E element){
        treeMap.remove(element);
    }

    public void traversal(LZTreeSet.Visitor<E> visitor){
        treeMap.traversal(new LZTreeMap.Visitor<E, Object>() {
            public boolean visit(E key,Object value){
                return visitor.visit(key);
            }
        });
    };

    public static abstract class Visitor<E> {
        public abstract boolean visit(E element);
    }

}

集合的时间复杂度
红黑树实现的局限性

元素必须具备可比较性

上一篇 下一篇

猜你喜欢

热点阅读