C++中的set和java的hashset有何区别?
以前对C++的STL容器烂熟于心,两年没碰过C++了,现在已经很生疏了。工作原因转战java,对java的容器不甚了解,特别是每看到一种容器,不由自主地拿起和C++对比。C++中的set和java的hashset有何区别,其实我也不太明白,google搜不到现成的答案,查了下相关资料,自己尝试做个总结,正确与否有待讨论了。
以下set特指C++的set容器,hashset指java中的。
1、set和hashset都不允许元素重复,但是set是有序的,hashset无顺序,所以向set插入元素必须重载<操作符比较大小,而hashset只需重载equal(),比较是否相等即可。
2、set底层数据结构为红黑树,索引时间为log(n),而hashset基于哈希表,比set要快一些,log(1)。
至于各自的用法,其实C++中的set我一般用来排序,懒得自己写排序函数,一堆杂乱无章的数据塞进去,取出来人家已经帮排好序了很安逸啊。java的hashset虽然没有排序的作用,但是可以帮去重呀,如果不想自己写去重的方法,直接把数据扔到hashset中,取出来就是没有重复的了。还有一个用处,数据量很大时怎么快速判断某个数是不是存在,hashset可以在log(1)的时间帮你定位哟。其它的用处暂时没想到了,毕竟还是纸上谈兵,java中复杂点的容器我通通还没有用过!
C++中的set和java的hashset有何区别?的更多相关文章
- Java的HashSet类
如果要查找一个集合中是否包含了某个对象,那么就需要把这个对象和这个集合中的每个对象依次进行比较和判断,直到找到这个对象为止,或者把所有对象都比较一次为止(如果最后一个对象才是要查找的对象,或者集合中没 ...
- Java集合---HashSet的源码分析
一. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. 二. ...
- Java之hashSet实现引用类型的禁止重复功能
题目:在HashSet集合中添加Person对象,把姓名相同的人当作同一个人,禁止重复添加. 分析:1.定义一个Person类,定义name和age属性,并重写hashCode()和equals()方 ...
- JAVA的HashSet源码分析
一.HashSet概述 HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. 二.HashS ...
- java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8)
一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...
- 【java】HashSet
package com.tn.hashSet; public class Person { private int id; private String name; private String bi ...
- java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8.0_111)
一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...
- redis(Springboot中封装整合redis,java程序如何操作redis的5种基本数据类型)
平常测试redis操作命令,可能用的是cmd窗口 操作redis,记录一下 java程序操作reids, 操作redis的方法 可以用Jedis ,在springboot 提供了两种 方法操作 Red ...
- java的HashSet 原理
概括:HashSet 以HashMap为基础,判断HashSet 中元素是否存在和重复,先把该元素经过hashcode()等方法计算之后得到的值作为key值, 然后比较该key值是否存在和重复(把该元 ...
随机推荐
- leetcode 67
67. Add Binary Given two binary strings, return their sum (also a binary string). For example,a = &q ...
- Solaris桌面CDE
/usr/dt/bin:应用程序/usr/dt/lib:运行时共享库/usr/dt/config:默认系统配置文件/usr/dt/man:手册页/usr/dt/app-defaults:默认应用程序资 ...
- C#时间处理--DateTime和TimeSpan
DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString();//12775641 ...
- Idea基本设置
1.idea 如何更改比编辑器文本字体和大小 换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea ...
- CentOS学习笔记--MySQL安装
MySQL安装 Linux中使用最广泛的数据库就是MySQL,使用在线yum的方式安装的版本落后MySQL网站好几个小版本,本节亲自测试安装新版的MySQL. 测试机器环境: VMware Works ...
- HTML的结束标签问题
根据w3c的原则,xml的每个开始标签必须有一个结束标签与之对应,也就是<html>必须要有</html>结束,才是一个完整的元素,除非它是一个自封闭标签,自封闭就是<i ...
- Python在金融,数据分析,和人工智能中的应用
Python在金融,数据分析,和人工智能中的应用 Python最近取得这样的成功,而且未来似乎还会继续下去,这有许多原因.其中包括它的语法.Python开发人员可用的科学生态系统和数据分析库.易于 ...
- jQuery在IE7和8下setInterval失效的问题
原因不在于setInterval,而是IE的缓存造成ajax请求页没有更新的问题. 在请求的url中加入一个随机数参数即可. var CheckPaied = function (transactio ...
- PHP-PCRE正则表达式函数
PCRE正则表达式函数 PCRE字符类 \\b 词边界 \\d 匹配任意数字 \\s 匹配任意空白,如TAB制表符或空格 \\t 匹配一个TAB ...
- php手册学习
整型:int 转换为整型:intval(str) 32位最大值64位最大值 不存在整除语法:应用round();四舍五入.integer去除小数. $a = 1234; //十进制数 $a = ...