Java中HashSet和TreeSet的区别

前言

Java中HashSet和TreeSet这两个集合实在是令人头疼,也算是一个入门级的东西,为了方便以后的学习,在这里做下总结!在说它两之间还要先说说Set!

Set

首先Set是Collection的接口,从Set的特点说起吧

  • Set集合是无序的
class Test12 {
    public static void main(String[] args) {
        Set<String>set=new HashSet<>();
        set.add("gg");
        set.add("ff");
        set.add("961235");
        set.add("ss");
        set.add("ww");
        System.out.println(set);  //输出:[ww, ff, gg, ss, 961235]
    }
}
  • Set集合是不可重复的
class Test12 {
    public static void main(String[] args) {
        Set<String>set=new HashSet<>();
        set.add("gg");
        set.add("ff");
        set.add("961235");
        set.add("ss");
        set.add("ww");
        System.out.println(set);  //输出:[ww, ff, gg, ss, 961235]
        set.add("gg");
        set.add("ff");
        System.out.println(set);  //输出:[ww, ff, gg, ss, 961235]
    }
}
  • Set的迭代遍历
        //迭代遍历
        Iterator<String> iterator=set.iterator();
        while (iterator.hasNext()){
            String str=iterator.next();
            System.out.print(str+"\t");  //输出:ww	ff	gg	ss	961235	
        } 

HashSet

HashSet实现了Set接口。它和Set一样是无序的、不可重复的。
和Set不同的就是,他的底层是HashMap,也就是说HashSet是HaspMap键的集合。定义一个HashSet集合,去add()方法里看一下(如下图)

在这里插入图片描述

TreeSet

TreeSet实现了SortedSet接口,可以对元素自然排序,要求集合中的元素必须是可比较的。

  • 在创建TreeSet时,可以指定Comparator比较器。(较灵活)
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {        //重写compare方法,按字符串降序排序
                return o2.compareTo(o1);
            }
        });

        treeSet.add("aa");
        treeSet.add("ww");
        treeSet.add("hh");
        treeSet.add("bb");
        treeSet.add("ff");
        System.out.println(treeSet);   //输出:[ww, hh, ff, bb, aa]
  • 创建TreeSet集合,不指定Comparator控制器。
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {        //重写compare方法,按字符串降序排序
                return o2.compareTo(o1);
            }
        });

        treeSet.add("aa");
        treeSet.add("ww");
        treeSet.add("hh");
        treeSet.add("bb");
        treeSet.add("ff");
        System.out.println(treeSet);   //输出:[ww, hh, ff, bb, aa]


        //TreeSet实现了Comparable接口
        TreeSet<String> treeSet2 = new TreeSet<>();
        treeSet2.addAll(treeSet);
        System.out.println(treeSet2);  //输出:[aa, bb, ff, hh, ww]
    }
  • TreeSet底层是TreeMap,TreeSet实际上是TreeMap键的集合
    在这里插入图片描述

总结

多去看Java底层的代码,明白其原理,后面还有很多集合,这只是刚开始!

猜你喜欢

转载自blog.csdn.net/ywq1016243402/article/details/88081304