Set接口

概述

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素

特点

  1. Set接口是无序的
  2. Set 是继承于Collection的接口。它是一个不允许有重复元素的集合。
  3. Set可以存储null值,但是null不能重复
  4. Set的实现类都是基于Map来实现的(HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。

HashSet类

概述

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

特点

  1. 底层数据结构是 哈希表,HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap实现的。HashSet中含有一个"HashMap类型的成员变量"map,在HashSet中操作函数,实际上都是通过map实现的。
  2. 哈希表保证唯一 依赖hashcode和equals方法

​ 原理: ​ 首先判断hashCode是否相同 ​ 不相同 ​ 就存储到集合中 ​ 相同 ​ 比较equals方法是否相同 ​ 相同 就不存储 ​ 不相同就以链表的方式存储到集合中

  1. 哈希表导致元素存储无序主要因为系统通过哈希算法计算出来的索引和对象本身的hashCode本身有关,所以这个整数值是无序的,从而存储到集合中自然就是无序的

HashSet存储自定义对象去除重复元素需要重写 hashCode和equals方法

TreeSet

概述

基于 TreeMapNavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

特点

  1. TreeSet 是一个有序的并且可排序的集合,它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。
  2. TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
  3. TreeSet是非同步的,线程不安全的,效率高。
  4. 二叉树保证元素唯一

​ 【

​ 第一个元素进来作为根节点存储

​ 后面元素进来和根节点比较

​ 大了,放在元素的右边

​ 小了,放在元素的左边

​ 相等,设置原值

  1. 二叉树保证元素可排序 --> 利用二叉树中序遍历取元素的特点。
  2. 注意中文排序可以使用 Collator类处理
  3. 建议使用三目运算符进行排序
  4. 针对返回值是double类型的,可以考虑使用三目转换成int类型的结果

LinkeHashSet

概述

List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List接口外,LinkedList类还为在列表的开头及结尾getremoveinsert` 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

特点

  1. 底层数据结构是 链表和哈希表
  2. 链表保证元素有序
  3. 哈希表保证元素唯一

Map集合

Map集合提供了集合之间一种映射关系

让集合和集合之间产生关系

Map集合的特点

1.能够存储唯一的列的数据(唯一,不可重复) Set

2.能够存储可以重复的数据(可重复) List

3.值的顺序取决于键的顺序

4.键和值都是可以存储null元素的

一个映射不能包含重复的键。

每个键最多只能映射到一个值。

常用功能

1.添加功能

​ V put(K key, V value)

​ void putAll(Map<? extends K,? extends V> m)

2.删除功能

​ V remove(Object key)

​ void clear()

3.遍历功能

​ Set keySet()

​ Collection values()

​ Set> entrySet()

4.获取功能

​ V get(Object key)

5.判断功能

​ boolean containsKey(Object key)

​ boolean containsValue(Object value)

​ boolean isEmpty()

6.修改功能

​ V put(K key, V value)

​ void putAll(Map<? extends K,? extends V> m)

7.长度功能

​ int size()

枚举

何为枚举?

枚举是在一定范围内取值,并且这个值必须是枚举类型中的任意一个,并且只能有一个

特点:

1.必须在规定范围内取值

2.这个值只能取一个

3.这个值可以是规定范围内的任意一个

枚举中常用的方法

String name()

返回此枚举常量的名称,与其枚举声明中声明的完全相同。

int ordinal()

返回此枚举常数的序数(其枚举声明中的位置,其中初始常数的序数为零)。

static >

T valueOf(类 enumType, String name)

返回具有指定名称的指定枚举类型的枚举常量。

T valueOf(String name)

T[] values();

枚举的特点总结

枚举既然是一个类,那么枚举是否有构造方法,成员方法,静态方法,静态变量,成员变量,抽象方法?

有的话,有意义吗?

1.枚举中所有的成员,必须出现在枚举对象的下面

2.如果枚举类中有一个成员,那么 枚举对象最后不能省略分号

3.枚举中构造方法必须私有

4.抽象方法有意义 - 可以用来描述某个枚举成员的信息,提高程序的可读性

5.枚举也是switch语句中 的常量 形式之一

switch语句中可以有哪些?

byte short int char String 枚举

java map取第一个元素_Java Set接口 Map 与枚举相关推荐

  1. java map取第一个元素_Java 8从Map中的匹配值中提取第一个键

    假设我有一个给定名称,姓氏对的地图,并且我想要找到该地图中具有匹配一定值的姓氏的第一个条目的给定名称. 我们将如何以 java 8方式做到这一点. 在我下面的测试用例的例子中,我提出了两种方法. 然而 ...

  2. java set删除第一个元素_Java面试题10(如何取到set集合的第一个元素)

    1.如何取到set集合的第一个元素. public static voidmain(String[] args) { Set set= newHashSet(); set.add("xixi ...

  3. java遍历栈的所有元素_Java如何遍历Map的所有的元素

    Java如何遍历Map的所有的元素 Map map = new HashMap(); Iterator it = map.entrySet().iterator(); while (it.hasNex ...

  4. java list取最后一个元素_Java stream() 获取List指定元素或最后一个元素的方法

    示例ListList list = Arrays.asList(1, 2, 3, 4, 5); 1.通过Stream()来获取 如果过滤器的计算结果为true,则检索该元素,否则返回最后一个元素.in ...

  5. JAVA中常量使用常量类或者常量接口还是使用枚举,错误代码和中文可变信息的枚举实现

    文章目录 关于"JAVA中常量使用常量类或者常量接口还是使用枚举",已有定论-使用枚举,原因就不再展开了. 借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是 ...

  6. java map取值_Java Set接口 Map 与枚举

    Set接口 概述 一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素 特点 Set接口是 ...

  7. jq取第一个子元素为select_jquery如何获取第一个或最后一个子元素?

    jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children("i ...

  8. jq取第一个子元素为select_【转】jquery如何获取第一个或最后一个子元素?

    [转自]https://www.cnblogs.com/MUMO/p/5938483.html 通过children方法,children("input:first-child") ...

  9. java输出数组中的元素_java一行代码输出数组的所有元素内容

    如果要用java把一个数组的元素都输出到控制台的话,你要怎么做呢? 是通过一个循环去循环数组中的各个元素,然后输出吗? 像不像二维数组 今天我要说的是,可以通过一行代码就完成这个工作.是一样什么样的代 ...

最新文章

  1. Maya2022基础入门学习教程
  2. 中小企业低成本快速建站的秘诀——模板建站
  3. 程序猿真成猴了? | 每日趣闻
  4. Net设计模式实例之建造者模式(Builder Pattern)(2)
  5. 不吹牛,中国车主已经实现了「停车自由」
  6. 宝塔同时安装苹果cms海洋cms_★苹果cms常见问题有哪些?100个常见问题的解决方法...
  7. 你知道铅酸蓄电池的常见失效模式吗?
  8. onlyoffice 收费不_西班牙银行开始泛滥收费,柜面取钱也要手续费
  9. 一个 Cobol 程序员的告白
  10. 【APICloud系列|41】融云单聊及消息的处理的对接与实现
  11. 学英语(3)---常用语英语
  12. 怎么处理table 与 form绑定的问题(现象:点击取消后 修改的值还是在table显示)
  13. 移动U盘数据恢复,移动U盘数据恢复方法
  14. iSCSI网络存储之IPSAN
  15. 【gazebo要素4】传感器插件(Velodyne)
  16. 养蚕日记软件测试,养蚕的过程日记300字
  17. Spark 报错Incompatible equality constraint: String and T2
  18. 量子计算机分解时间,量子计算机如何分解两个质数乘积
  19. pro缺点和不足 一加7t_一加7T Pro深度体验半个月以后:优点和缺点都很明显
  20. 游戏陪玩小程序怎么开发-游戏陪玩小程序功能

热门文章

  1. 一般通话记录能保存多少条_鸡蛋放冰箱,能保存多少天?正确保存方法是什么?...
  2. linux centos命令语法,linux-centos7
  3. python书籍排行榜前十名_学习Python,这些书你看过几本?
  4. 【转】WPF调用图片路径,或资源图片
  5. SharePoint无代码工作流设计开发实例——交通费报销流程(二)
  6. NuGet的使用、部署、搭建私有服务
  7. 四年级信息技术认识计算机,四年级信息技术第三课信息工具知多少
  8. 动态网站的技术路线_3个好玩实用小网站!闲暇时间不妨打开看看
  9. MapReduce的shuffle阶段
  10. Python3 基础学习笔记 C06【用户输入和 while 循环】