ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Set、HashSet、TreeSet

2021-02-09 22:32:04  阅读:165  来源: 互联网

标签:Set iterator HashSet add set TreeSet


Set是Collection的子接口,HashSet是Set的实现类,SortedSet是Set的子接口,TreeSet是SortedSet的实现类。

这些集合共同的特点都是:无序、不可重复。

方法也与Collection相差无几。

1.Set

Set是一个接口,不能直接实例化对象,要借助其实现子类。

package com.dh.set;

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

public class Set01 {
    public static void main(String[] args) {
        //Set是接口,借助HashSet实现类
        Set<String> set = new HashSet<>();

        set.add("a");
        set.add("a");//可以添加重复元素,但是只会存储一个

        //遍历元素也只有两种方法
        //1.for增强
        System.out.println("for增强遍历:");
        for (String s : set) {
            System.out.println(s);
        }
        //2.迭代器
        System.out.println("迭代器遍历:");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

结果:只输出了一个a

for增强遍历:
a
迭代器遍历:
a

2.HashSet

HashSet底层为哈希表。存储在HashSet中的元素实际存放到了HashMap集合的key上。

源码:

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

所以将重点放在HashMap集合上,只要搞懂了HashMap,HashSet也就理解了。

下一篇文章将会介绍。

3.TreeSet

TreeSet的底层为二叉树。存储在TreeSet上的元素实际存储在HashMap的key上。

添加到TreeSet中的元素会自动按照从小到大的顺序排序。

这里要注意排序和元素有序的区别:排序是按照一定的排序规则组织元素的顺序,而有序的意思是元素可以通过下标来操作,以及输出元素顺序与添加元素顺序一致。

例:

package com.dh.set;

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSet01 {

    public static void main(String[] args) {

        TreeSet<Integer> treeSet = new TreeSet<>();
        treeSet.add(1);
        treeSet.add(3);
        treeSet.add(2);
        for (Integer integer : treeSet) {
            System.out.println(integer);
        }

        //字符串会按照字典顺序逐个字母进行比较
        TreeSet<String> treeSet1 = new TreeSet<>();
        treeSet1.add("world");
        treeSet1.add("hello");
        Iterator<String> iterator = treeSet1.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

结果:

1
2
3
hello
world

以上内容还涉及到:

  • 哈希表和二叉树的结构;

  • 这些集合如何判断新添加的元素是否是已经存在的元素;

  • 如何自定义比较规则。

这些问题都会在相关的Map集合中详细的介绍。即下一篇文章~

标签:Set,iterator,HashSet,add,set,TreeSet
来源: https://www.cnblogs.com/denghui-study/p/14394423.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有