专栏首页Don的成长史JAVA中HashSet、TreeSet和LinkedHashSet的比较

JAVA中HashSet、TreeSet和LinkedHashSet的比较

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/86365386

写在前面:

嘤...嘤嘤,本菜鸡只会用C++的STL,通过前面的博文也可以看出来。我jio得非常有必要学习一下JAVA中的STL。好了,不瞎哔哔了。

说正经的:

我是站在C++的基础上来理解JAVA的Set用法的,如果不知道C++中set用法的小伙伴请戳链接:某大佬的博客链接—C++中set的用法

JAVA中常用的Set方法:

函数和用法

add( ) 向集合中添加元素

clear( ) 去掉集合中所有的元素

contains( ) 判断集合中是否包含某一个元素

isEmpty( ) 判断集合是否为空

iterator( ) 主要用于递归集合,返回一个Iterator()对象

remove( ) 从集合中去掉特定的对象

size( ) 返回集合的大小

JAVA中的set有三种:HashSet,TreeSet和LinkedHashSet。

①HashSet的输出顺序是不确定的,但是它的速度最快;

②TreeSet输出顺序是升序排列的,相当于C++中的set,个人比较喜欢这种;

③LinkedHashSet输出顺序是确定的,就是插入时的顺序。

Talk is cheap,show me the code!下面通过一段代码来比较三者的性能:

import java.util.*;
 
public class SetExample {
    public static void Cmp(Set s) {
        int[] a = {1,6,58,99,23,88};
        long startTime = System.nanoTime();
        //添加元素
        for(int i = 0; i < a.length; i++) {
            s.add(a[i]);
            s.add(a[i]);
            s.add(a[i]);
        }
        //输出元素
        Iterator it = s.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
        long endTime = System.nanoTime();
        long duration = endTime - startTime;  //持续时间
        System.out.println("耗时(单位:纳秒):"+duration);
    }
    
    public static void main(String[] args) {
        //声明三种Set
        Set<Integer> set1 = new HashSet();
        Set<Integer> set2 = new TreeSet();
        Set<Integer> set3 = new LinkedHashSet();
        //比较三种Set的性能
        //HashSet输出顺序是不确定的,但是速度最快
        System.out.print("HashSet的输出顺序:");
        Cmp(set1);  
        //TreeSet输出顺序是升序排列的,相当于C++中的set
        System.out.print("TreeSet的输出顺序:");
        Cmp(set2);
        //LinkedHashSet输出顺序是确定的,就是插入时的顺序
        System.out.print("LinkedHashSet的输出顺序:");
        Cmp(set3);
    }
}

运行代码后结果如下:

HashSet的输出顺序:1 99 6 23 88 58 耗时(单位:纳秒):263293
TreeSet的输出顺序:1 6 23 58 88 99 耗时(单位:纳秒):554667
LinkedHashSet的输出顺序:1 6 58 99 23 88 耗时(单位:纳秒):615202

参考链接:https://www.programcreek.com/2013/03/hashset-vs-treeset-vs-linkedhashset/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 8中集合优雅快速的处理方式

    相信现在大多数的伙伴们,都在使用Java 8了,而 Java 8相比以前的版本,是作出了革命性的改变。Java8的特性大致可总结为,开发速度更快,代码更少,增加...

    攻城狮的那点事
  • Qml组件小知识

    Qt君
  • 一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring M...

    用代码征服天下
  • lambda与函数式

    前面两篇文章介绍了什么是响应式编程?和响应式流的特性,一味讲概念终是枯燥,还是上手敲一敲代码实在感受一下响应式编程的“手感”吧。

    Java3y
  • SparkRDD转DataSet/DataFrame的一个深坑

    原需求:希望在map函数中将每一个rdd转为DataSet或者DataFrame。

    王知无
  • 从bug看11种编程语言演化史,果然如今Python最流行

    在本文中,作者选择了 11 种最流行的编程语言(通过 Stack Overflow 标签出现的频率衡量),希望可以找出这些问题的共性及差异性。

    机器之心
  • JS 中可以提升幸福度的小技巧

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新~

    Nealyang
  • Spring组成

    百科上的一段对于spring的定义,从中可以提取到Spring是开源、面向接口编程的轻量级框架,解决了业务逻辑和其他层之间的耦合问题。 Spring如何实现解藕...

    OPice
  • 链表的实现

    链表分为单向链表、双向链表和循环链表。链表这种数据结构就像是火车车厢一样,每个车厢可以插入到任意的的位置。与数组不同的是,数组的数据存储是连续的存储单元,就好比...

    多云转晴
  • java 序列化Serializable

    张工是一名java程序员,工作5年了,一直从事java开发。最近到某互联网公司面试,做了笔试题后,有一道笔试题是这样子的:Serializable有什么作用,张...

    葫芦

扫码关注云+社区

领取腾讯云代金券