java Collection之set

set集合的特点:不能存储相同的元素;

HashSet

HashSet底层数据结构为HashMap,为Hash表结构,新增元素相当于HashMap的key,value默认为一个固定的Object;

HashSet:不允许出现重复元素,允许插入null值,元素无序(添加顺序和遍历顺序不一致),线程不安全。

源码:

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

Set结合中没有角标的概念,所以获取元素没有list一样的get()方法,获取HashSet中某个元素时,只能通过遍历集合的方式进行equals()比较来实现。

HashSet基本方法实例:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestSet {
    public static void main (String[] args) {
        //HashSet
        Set<String> testHashSet = new HashSet<>();
        //元素添加
        testHashSet.add("beijing");
        testHashSet.add("beijing");
        testHashSet.add("shanghai");
        testHashSet.add("guangzhou");
        testHashSet.add("shenzhen");
        System.out.println(testHashSet);
        System.out.println("去重,HashSet容量大小:" + testHashSet.size());

        //判断是否包含某元素
        if (testHashSet.contains("beijing")) {
            System.out.println("true,集合包含beijing");
        }

        //移除某元素
        testHashSet.remove("guangzhou");
        System.out.println(testHashSet);

        //判断集合是否为空
        if (testHashSet.isEmpty()) {
            System.out.println("集合为空");
        } else {
            System.out.println("集合不为空");
        }

        //集合遍历-通过迭代器
        Iterator<String> iterator = testHashSet.iterator();
        while (iterator.hasNext()) {
            String setStr = iterator.next();
            System.out.println("元素遍历:" + setStr);
        }

        //集合遍历-增强for循环
        for (String setStr : testHashSet) {
            System.out.println("增强for循环遍历set:" + setStr);
        }

        //获取HashSet的某个元素
        for (String setStr : testHashSet)
            if (setStr.equals("shenzhen")){
                String getStr = setStr;
                System.out.println("获取到元素:"+getStr);
        }

        //元素清除
        testHashSet.clear();
        System.out.println("clear元素清除后:"+testHashSet);
    }
}

 

TreeSet

TreeSet底层结构为红黑树(特殊的二叉查找树),TreeMap,与HashSet不同的是,TreeSet具有排序功能,分为自然排序(123456)和自定义排序两类,默认是自然排序;在程序中,我们可以按照任意顺序将元素插入到集合中,等到遍历时TreeSet会按照一定顺序输出--倒序或者升序;

TreeSet:对插入的元素进行排序,是一个有序的集合(主要与HashSet的区别),底层使用红黑树结构,而不是哈希表结构,允许插入Null值,不允许插入重复元素,线程不安全。

源码:

public TreeSet() {
        this(new TreeMap<E,Object>());
    }

TreeSet基本方法实例:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class TestSet {
    public static void main (String[] args) {

        //TreeSet
        Set <String> testTreeSet = new TreeSet<>();
        //元素添加
        testTreeSet.add("apple");
        testTreeSet.add("apple");
        testTreeSet.add("banana");
        testTreeSet.add("orange");
        testTreeSet.add("pear");
        System.out.println(testTreeSet);
        System.out.println("去重,TreeSet容量大小:" + testTreeSet.size());

        //判断是否包含某元素
        if (testTreeSet.contains("apple")) {
            System.out.println("true,集合包含apple");
        }

        //移除某元素
        testTreeSet.remove("banana");
        System.out.println(testTreeSet);

        //判断集合是否为空
        if (testTreeSet.isEmpty()) {
            System.out.println("treeSet集合为空");
        } else {
            System.out.println("treeSet集合不为空");
        }

        //集合遍历-通过迭代器
        Iterator<String> it = testTreeSet.iterator();
        while (it.hasNext()) {
            String treeSetStr = it.next();
            System.out.println("元素遍历:" + treeSetStr);
        }

        //集合遍历-增强for循环
        for (String treeSetStr : testTreeSet) {
            System.out.println("增强for循环遍历set:" + treeSetStr);
        }

        //获取TreeSet的某个元素
        for (String treeSetStr : testTreeSet)
            if (treeSetStr.equals("pear")){
                String getStr = treeSetStr;
                System.out.println("获取到元素:"+getStr);
            }

        testTreeSet.toArray();
        System.out.println("转换为数组:"+testTreeSet);

        //元素清除
        testTreeSet.clear();
        System.out.println("clear元素清除后:"+testTreeSet);

        //TreeSet自然排序
        TreeSet<String> treeSetString = new TreeSet<String>();
        treeSetString.add("a");
        treeSetString.add("z");
        treeSetString.add("d");
        treeSetString.add("b");
        System.out.println("字母顺序:" + treeSetString.toString());
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值