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

246dd13ce674bc95ef0137c747b198bf.png

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 枚举

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux调用ocx插件_Wordpress file manager插件任意文件上传

白斩鸡卫兵实验室近日&#xff0c;Wordpress 插件file manager被爆出严重0day漏洞&#xff0c;本着技术研究角度&#xff0c;和大家分享、探讨其漏洞原因。该修复程序已在同一天发布&#xff0c;并且WP File Manager插件6.9版通过删除允许未经授权的文件上传访问的端点来解决当…

树莓派安装mysql5.6_Linux上安装MySQL5.6

OS & MySQL的版本号和配置&#xff1a;MySQL Version: 5.6.19Linux Version: Linux boston.oracle.com 2.6.18-164.el5 #1 SMP Thu Sep 3 02:16:47 EDT 2009 i686 i686 i386 GNU/Linux一。下载MySQL安装软件。请到www.oracle.com去找DATABASE DOWNLOAD。下载MySQL须要注冊一…

java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略

一、性能测试Ⅰ.测试方法微基准性能测试可以精准定位到某个模块或者某个方法的性能问题&#xff0c;例如对比一个方法使用同步实现和非同步实现的性能差异宏基准性能测试宏基准性能测试是一个综合测试&#xff0c;需要考虑到测试环境、测试场景和测试目标测试环境&#xff1a;模…

java在线编辑器_微软开源在线代码编辑器——Monaco Editor

介绍Monaco Editor是为VS Code提供支持的代码编辑器&#xff0c;运行在浏览器环境中。编辑器提供代码提示&#xff0c;智能建议等功能。供开发人员远程更方便的编写代码。移动浏览器或移动Web框架不支持Monaco编辑器。简单的理解就是VSCode中的代码编辑器和Monaco Editor使用的…

java的核心类库_Java核心类库,集合框架

Java集合框架的由来&#xff1a;Java最初版本只为最常用的数据结构提供了很少的一组类&#xff1a;比如Vector、Stack、Hashtable、BitSet、Enumerrationr接品&#xff0c;其中Enumerrationr接口提供了一种用于访问任意容器中各个元素的抽象机制。这是一种很明智的选择&#xf…

js splice方法_我用JS刷LeetCode | Day 8

如有兴趣&#xff0c;微信搜索「九零后重庆崽儿」&#xff0c;我们一起学前端。删除排序数组中的重复项:说明&#xff1a;现阶段的解题暂未考虑复杂度问题首发地址&#xff1a;我用JS刷LeetCode | Day 8​www.brandhuang.comQuestion&#xff1a;Given an array nums and a val…

js 根据掩码位计算可用ip地址_变长子网掩码:轻松分配IP地址(下)

Hello,World.如约而至土土来更文咯[吐舌]图1首先先揭晓一下上一篇文章的答案那就是192.168.1.0/24与192.168.2.0/24不能ping通192.168.1.0/16与192.168.2.0/16能ping通图2还记得土土的提示吗&#xff1f;网络号相同则能够ping通那么根据/24可以看出这两个IP地址有24个网络号,即…

java break递归_【Java】递归总结

摘要&#xff1a;大师 L. Peter Deutsch 说过&#xff1a;To Iterate is Human, to Recurse, Divine.中文译为&#xff1a;人理解迭代&#xff0c;神理解递归。毋庸置疑地&#xff0c;递归确实是一个奇妙的思维方式。对一些简单的递归问题&#xff0c;我们总是惊叹于递归描述问…

[翻译] RDVTabBarController

RDVTabBarController https://github.com/robbdimitrov/RDVTabBarController 效果&#xff1a; Supports iPad and iPhone 支持iPad与iPhoneSupports landscape and portrait orientations 支持横竖屏切换动画Can be used inside UINavigationController 可以用在UINavigationC…

内存位置访问无效 midas.dll_java并发之内存模型

作者&#xff1a;killianxu来源&#xff1a;https://www.cnblogs.com/killianxu/p/11665903.htmljava内存模型知识导图一 并发问题及含义并发编程存在原子性、可见性、有序性问题。原子性即一系列操作要么都执行&#xff0c;要么都不执行。 可见性,一个线程对共享变量的修改&am…

程序一旦发觉写得不理想,那就得重构它

早上有写一篇《设计模式--建造者(Builder)模式》http://www.cnblogs.com/insus/p/4179620.html。是在ASP.NET环境中&#xff0c;应用与演示设计模式(Builder)。现在Insus.NET从博文中最后的下载链接下载取源程序&#xff0c;它是有写得不够理想&#xff0c;现在重构它。问题点&…

template标签_C++核心准则T.65:使用标签分发提供函数的不同实现

T.65: Use tag dispatch to provide alternative implementations of a functionT.65:使用标签分发提供函数的不同实现Reason(原因)A template defines a general interface.模板定义普遍接口。Tag dispatch allows us to select implementations based on specific properties…

Windows服务器学习篇:服务器连接与退出

此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章&#xff0c;非常基础简单&#xff0c;现拿出来给大家分享。当然&#xff0c;已工作人士可直接忽略... 一、Windows服务器连接 1. 在桌面菜单中的“运行”里&#xff0c;输入mstsc命令&#xff0c;然后回车…

nginx动静分离配置_Nginx动静分离

动静分离动静分离&#xff0c;就是将JSP、Servlet等动态资源交由Tomcat或其他Web服务器处理&#xff0c;将CSS、js、image等静态资源交由Nginx或其他Http服务器处理&#xff0c;充分发挥各自的优势&#xff0c;减轻其他服务器的压力&#xff0c;搭建更为高效的系统架构。Nginx动…

java thread 名称_Thread类常用方法之设置线程名称

package com.itheima.demo02.setName;/*设置线程的名称:(了解)1.使用Thread类中的方法setName(名字)void setName(String name) 改变线程名称&#xff0c;使之与参数 name 相同。2.创建一个带参数的构造方法,参数传递线程的名称;调用父类的带参构造方法,把线程名称传递给父类,让…

成员变量和局部变量的区别_Java 变量类型

点击上方“蓝字”带你去看小星星今天主要学习Java变量类型&#xff0c;主要是局部变量、实例变量和类变量(静态变量)。Java语言中&#xff0c;所有的变量在使用前必须声明。声明变量的基本格式如下&#xff1a;type identifier [ value][, identifier [ value] ...] ;格式说明…

【云图】如何制作附近实体店的地图?-微信微博支付宝

【云图】如何制作附近实体店的地图&#xff1f;-微信微博支付宝 原文:【云图】如何制作附近实体店的地图&#xff1f;-微信微博支付宝 摘要&#xff1a; 附近连锁店地图与全国连锁店地图&#xff0c;最大的区别就是&#xff1a; 1、附近连锁店地图需要先定位&#xff0c;然后搜…

php curl跨域cookie_PHP curl模拟文件上传(接口请求实现跨域文件中转)

3e2f08c0c11a8416dd107bbfc9159718.jpg客户端代码请求参数参数类型参数说明$urlstringpost提交的服务器url路径$data数组表单数据$files数组表单文件public function curl_custon_postfields($url, array $data array(), array $files array()){$curlfiles array();foreach …

oracle 分页_80分页查询,不止写法

据孔老先生说,茴香豆的茴字有四种写法,那oracle的分页查询又有多少种写法呢?分页查询,其实本质上就是topN查询的变种, 如果把topN的一部分结果集去掉,就变成了分页.topN的基本写法,两层select,第一层先order by,第二层再用rownum:select owner,object_name,object_id,rownum a…

GitHub上创建组织

4.3. 组织和团队 GitHub 在早期没有专门为组织提供账号&#xff0c;很多企业用户或大型开源组织只好使用普通用户账号作为组织的共享账号来使用。后来&#xff0c;GitHub推出了组织这一新的账号管理模式&#xff0c;满足大型开发团队的需要。 组织账号是不能用来登录的&#xf…