java集合

Set 接口总结

特点:

1,数据不允许有重复
2,最多可存储一个null值

主要提供的方法:

add(E e):如果set中未存在指定元素,则添加此元素;
addAll():如果set没有collection中的所有元素,则添加到此set中;
clear():移除set中的所有元素;
contains(Object o):如果set中含有该元素返回true,否则返回false;
containsAll():如果set中含有collection中所有元素返回true,否则返回false;
equals(Object o):比较指定对象与set的相等性;
hashCode():返回hash值;
isEmpty():如果set中有元素就返回true,否则返回false;
iterator():返回在此Set上元素迭代的迭代器;
remove(object o):移除set中指定的元素;
removeAll():移除set中collection中包含的元素;
retainAll():仅保留set中collection中含有的元素;
size():返回set中元素的个数;
toArray():返回包含set中所有元素的一个数组;
toArray(T[ ] a):返回包含set中所有元素的一个数组,其数据类型为指定的数据类型;

实现类:

HashSet:

特点:
1,不能保证数据有序

 HashSet<String> hashSet=new HashSet();
        hashSet.add("我");
        hashSet.add("爱");
        hashSet.add("学");
        hashSet.add("习");
        Iterator<String> iterator =hashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

输出结果:
在这里插入图片描述
2,元素不能重复

  HashSet<String> hashSet = new HashSet();
        hashSet.add("我");
        hashSet.add("我");
        hashSet.add("爱");
        hashSet.add("学");
        hashSet.add("习");
        Iterator<String> iterator = hashSet.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

输出结果:
在这里插入图片描述
3,可以存储null值

 HashSet<String> hashSet = new HashSet();
        hashSet.add("我");
        hashSet.add(null);
        hashSet.add("爱");
        hashSet.add("学");
        hashSet.add("习");
        Iterator<String> iterator = hashSet.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

输出结果
在这里插入图片描述
属性

//map属性是存储数据的,是HashMap类型的数据
private transient HashMap<E,Object> map;
//PRESENT属性, 
private static final Object PRESENT = new Object();
HashSet底层实现是基于HashMap来实现的,将set中存储的值作为HashMap的key来处理,PRESENT是一个填充的value值

构造函数

public HashSet() {
        map = new HashMap<>();
    }

    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }


    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

LinkedHashSet:

特点:
1,数据有序:

 LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add(1);
        linkedHashSet.add(5);
        linkedHashSet.add(10);
        linkedHashSet.add(8);
        linkedHashSet.add(9);
        final Iterator<Integer> iterator = linkedHashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

运行结果:
在这里插入图片描述
2,可以存储null值

 LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
       linkedHashSet.add(null);
        final Iterator<Integer> iterator = linkedHashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

运行结果:
在这里插入图片描述
3,数据不能重复:

  LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add(1);
        linkedHashSet.add(1);
        linkedHashSet.add(1);
        linkedHashSet.add(1);
        final Iterator<Integer> iterator = linkedHashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

输出结果:
在这里插入图片描述

源码:

public class LinkedHashSet<E> extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {

    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }


    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }


    public LinkedHashSet() {
        super(16, .75f, true);
    }


    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }
}

由源码可知:其继承自HashSet,其继承了HashSet中所有的属性和方法。

构造函数调用父类HashSet中方法如下:

 HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new <>(initialCapacity, loadFactor);
    }

总结:①LinkedHashSet的实现是基于LinkedHashMap来实现的
②LinkedHashSet数据有序的特征是基于LinkedHashMap来保证的,其底层利用双向链表来实现的数据有序

TreeSet

特点:
1,数据自然有序:

TreeSet<Integer> treeSet=new TreeSet<>();
        treeSet.add(8);
        treeSet.add(2);
        treeSet.add(5);
        treeSet.add(10);
        Iterator<Integer> iterator = treeSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

输出结果:
在这里插入图片描述
2,数据不能重复:

 TreeSet<Integer> treeSet=new TreeSet<>();
        treeSet.add(8);
        treeSet.add(8);
        treeSet.add(8);
        Iterator<Integer> iterator = treeSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

输出结果:
在这里插入图片描述
3,不能存储null值

 TreeSet<Integer> treeSet=new TreeSet<>();
        treeSet.add(null);
        Iterator<Integer> iterator = treeSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

输出结果:
在这里插入图片描述
TreeSet底层是基于treeMap来实现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值