一、Set 概述

  java.util.Set 接口继承 collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。

  Set 接口中会以某种规则保证存入的元素不出现重复

  Set 集合不是同步的,多线程的。

  特点查询速度快,不重复,没有索引。

二、常用方法

  常用方法参考 Collection 的方法:常用方法

三、实现类

  HashSet 集合

  LinkedHashSet 集合

  TreeSet 集合

  1、Set 集合是有序的吗?

    ① 如果按照元素的存储顺序来说,有一些是可以保证的,有一些是不能保证的。唯有 LinkedHashSet可以保证元素添加的顺序

    ② 如果按照元素的大小顺序来说,有一些是可以保证的,有一些是不能保证的。唯有 TreeSet可以保证元素的大小顺序

    ③ HashSet:既不能保证添加顺序,也不能保证大小顺序。是完全无序的。

  2、HashSet 与 LinkedHashSet 区别?

    HashSet:完全无序。

    LinkedHashSet:是按照添加顺序来存储的。LinkedHashSet 是 HashSet 的子类,比 HashSet 多维护了添加的顺序。

    当既想要实现集合的元素的不可重复性,又想要保证元素的添加顺序,就选择使用LinkedHashSet(效率低),否则就用List系列或HashSet。

  3、HashSet 与 TreeSet 的区别?

    HashSet:完全无序。

    TreeSet:是按照存储元素的大小来排序,当你需要元素不可重复,又要给元素排大小时,就用TreeSet。

    注意:要用到TreeSet,存储的元素对象一定要实现 要用到TreeSet,一定要用java.lang.Comparable或java.util.Comparator

  3、如何保证元素不可重复的呢?(如何判断两个元素是重复的呢)

    (1)HashSet 和 LinkedHashset 集合:

        ① 先比较元素的 hash 值,如果 hash 值不一样,说明两个元素一定不相同。

        ② 如果 hash 值一样,再调用 equals 方法比较

    (2)TreeSet 集合:

       按照存储元素的大小来决定元素是否相同,如果两个元素大小“相等”就是相同的元素。即必须实现 java.lang.Comparable或java.util.Comparator。

Java 之 Set 接口的更多相关文章

  1. 【转】java通用URL接口地址调用方式GET和POST方式

    java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...

  2. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  3. java中set接口的用法

    java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特 ...

  4. Java调用webservice接口方法

                             java调用webservice接口   webservice的 发布一般都是使用WSDL(web service descriptive langu ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. JAVA ,Map接口 ,迭代器Iterator

    1.    Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...

  7. java抽象类和接口区别

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  9. 如何让Java和C++接口互相调用:JNI使用指南

    如何让Java和C++接口互相调用:JNI使用指南 转自:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos ...

  10. Java中的队列:java.util.Queue接口

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作. Queue接口与List.Set同一级别,都是继承了Collection接口.Linked ...

随机推荐

  1. Spring 整合 JPA

    spring 整合 jpa 客户的基本CRUD 依赖 <properties> <spring.version>4.2.4.RELEASE</spring.version ...

  2. Java反射之Bean修改更新属性值等工具类

    package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...

  3. USACO Clumsy Cows

    洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows 洛谷传送门 JDOJ 2323: USACO 2012 Nov Silver 1.Clumsy Cows JDOJ传送门 Desc ...

  4. Cookie、token、session的区别是什么?

    背景: 最近在总结一些容易理解混淆的概念,之前面试的时候提到过,我觉得也说不清楚,这两天项目做接口测试发现用的cookie而不是之前的token,于是总结一下,便于以后用到的时候再阅读以及分享给需要的 ...

  5. Spring Boot 知识笔记(整合Mybatis续-补充增删改查)

    续上篇,补充数据库增删改查的其他场景. 一.Mapper中添加其他场景操作 package net.Eleven.demo.Mapper; import net.Eleven.demo.domain. ...

  6. rsync 使用方法 ssh免密问题 不同端口同步

    不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...

  7. Leetcode 5274. 停在原地的方案数

    纪念第一次正式参加,听说这次题目很水,感觉确实不是很难,一般前两题都很简单,这次,到第三题的时候,都还可以做,emm...... 实际代码记录: #include <iostream> # ...

  8. this与bind(this) (es5新增)

    this与bind(this) this this指向的是当前函数的作用域(对象实例),有如下的例子 const app = { name: 'xiaoming', log() { console.l ...

  9. linux 重启jmeter服务

    #!/bin/bash #jmeter kill and start echo -e '\033[32m--------Jmeter---------------\033[0m' echo " ...

  10. 微信小程序路径表达式解析规则

    小程序 setData 方法支持路径表达式来设置属性,例如 setData({"x.y.z": 1}). 微信官方没有公布路径表达式的语法规则及解析规则,本文所描述的路径表达式解析 ...