Phase2 Day11 Set Map
文章目录
- 1 Set
- 1.1 TreeSet
- 1.1.1概念
- 1.1.2 API
- 2 Map(映射)
- 2.1 概述
- 2.2 API
- 3 HashMap
- 3.1 概述
- 3.2 构造方法
- HashMap 与 Hashtable
- 4 LinkedHashMap
- 5 TreeMap
- 5.1 概述
- 5.2 TreeMap特有的API
1 Set
1.1 TreeSet
1.1.1概念
TreeSet:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
- TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。
- 实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销。
- 不能存储null元素,除非Comparator中定义了null元素
- 如果创建对象时,没有传入 Comparator 对象,则根据自然顺序进行排序。要求存储对象必须实现Comparable接口,否则会抛出ClassCastException.
- 如果创建对象时,传入了 Comparator 对象,则根据 Comparator 进行排序。不要求元素必须实现Comparable接口
- 不能修改 TreeSet 元素的属性值,否则不保证元素有序
- 不同步
1.1.2 API
API
E ceiling(E e) 返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null E floor(E e) 返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。Comparator<? super E> comparator() 返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null
Iterator<E> descendingIterator() 返回在此 set 元素上按降序进行迭代的迭代器
E last() 返回此 set 中当前最后一个(最高)元素
E first() 返回此 set 中当前第一个(最低)元素
E higher(E e) 返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null
E lower(E e) 返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
E pollFirst() 获取并移除第一个(最低)元素;如果此 set 为空,则返回 null
E pollLast() 获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null
NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。
SortedSet<E> subSet(E fromElement, E toElement) 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。
SortedSet<E> tailSet(E fromElement) 返回此 set 的部分视图,其元素大于等于 fromElement。
NavigableSet<E> tailSet(E fromElement, boolean inclusive) 返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。
2 Map(映射)
2.1 概述
- 将键映射到值的对象
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值。
2.2 API
接口 Map.Entry<K,V>
boolean equals(Object o) 比较指定对象与此项的相等性。 K getKey() 返回与此项对应的键。 V getValue() 返回与此项对应的值。 int hashCode() 返回此映射项的哈希码值。 V setValue(V value) 用指定的值替换与此项对应的值(可选操作)。
MAP API
增(改):
V put(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关系复制到此映射中(可选操作) 删:
void clear() 从此映射中移除所有映射关系(可选操作)
V remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)查:
boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
V get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null获取集合属性:
int size() 返回此映射中的键-值映射关系数
boolean isEmpty() 如果此映射未包含键-值映射关系,则返回 true 遍历:
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图(遍历键值对)
Set<K> keySet() 返回此映射中包含的键的 Set 视图(遍历键)
Collection<V> values() 返回此映射中包含的值的 Collection 视图(遍历值)
3 HashMap
3.1 概述
- 基于哈希表的 Map 接口的实现。
- 此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null之外,HashMap 类与 Hashtable 大致相同,底层都是哈希表)
- 此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
- 不同步
- HashMap存储自定义对象:
HashMap依赖Key对象的equals()和hashCode()
千万不要修改HashMap key的属性值
3.2 构造方法
HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity, float loadFactor) 构造一个带指定初始容量和加载因子的空 HashMap
HashMap(Map<? extends K,? extends V> m) 构造一个映射关系与指定 Map 相同的新 HashMap
HashMap 与 Hashtable
- 继承的父类不同
HashMap继承自AbstractMap类。但二者都实现了Map接口。
Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。 - HashMap线程不安全,HashTable线程安全
- 包含的contains方法不同
HashMap是没有contains方法的,而包括containsValue和containsKey方法;hashtable则保留了contains方法,效果同containsValue,还包括containsValue和containsKey方法。 - 是否允许null值
Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;HashTable键值对都不能为空,否则报空指针异常。 - 计算hash值方式不同
- 扩容方式不同(容量不够)
HashMap 哈希扩容必须要求为原容量的2倍,而且一定是2的幂次倍扩容结果,而且每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入;
而Hashtable扩容为原容量2倍加1; - 解决hash冲突方式不同
4 LinkedHashMap
概述:
- HashMap的子类
- Map 接口的哈希表和链表实现,具有可预知的迭代顺序.
- 链表定义了迭代顺序,该迭代顺序就是键值对的插入顺序
- 不同步
- 注意事项:
HashMap依赖Key对象的equals()和hashCode()
千万不要修改HashMap key的属性值
5 TreeMap
5.1 概述
- 底层的数据结构是红黑树
- 如果创建对象时,没有传入 Comparator 对象,键将按自然顺序进行排序
- 如果创建对象时,传入了 Comparator 对象,键将按 Comparator 进行排序
- 不能存储null键, 除非Comparator对象对象对null对象能进行比较
- 不同步
- TreeMap依赖于Key的compareTo()方法,或者是传入Comparator对象的compare()
构造方法
TreeMap() 使用键的自然顺序构造一个新的、空的树映射
TreeMap(Comparator<? super K> comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序
TreeMap(Map<? extends K,? extends V> m) 构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序
TreeMap(SortedMap<K,? extends V> m) 构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射
5.2 TreeMap特有的API
K firstKey() 返回此映射中当前第一个(最低)键
K lastKey() 返回映射中当前最后一个(最高)键
Map.Entry<K,V> pollFirstEntry() 移除并返回与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null
Map.Entry<K,V> pollLastEntry() 移除并返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null
K floorKey(K key) 返回小于等于给定键的最大键;如果不存在这样的键,则返回 null
K ceilingKey(K key) 返回大于等于给定键的最小键;如果不存在这样的键,则返回 null
K lowerKey(K key) 返回严格小于给定键的最大键;如果不存在这样的键,则返回 null
K higherKey(K key) 返回严格大于给定键的最小键;如果不存在这样的键,则返回 null
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) 返回此映射的部分视图,其键的范围从 fromKey 到 toKey
Phase2 Day11 Set Map相关推荐
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
- day11【过渡】SpringBoot
day11[过渡]SpringBoot 1.HelloWorld(Maven版本) 1.1.创建Maven工程 新建Maven工程 因为SpringBoot自带嵌入式Tomcat服务器,我们打包为ja ...
- python求和函数1-n_PYTHON1.day11(n)
day10回顾 函数名是变量,它用来绑定"函数" 函数可以作为参数传入另一个函数 函数可以返回另一个函数 函数的嵌套定义 def f1(): def f2(): pass f2() ...
- Map的分类和不同的应用场景
java为数据结构中的映射定义了一个接口java.util.Map; 它有四个实现类,分别是HashMap,Hashtable,LinkedHashMap和TreeMap 可能很多人只使用过HashM ...
- java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解
1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...
- Go 学习笔记(67)— Go 并发安全字典 sync.Map
1. 并发不安全的 map Go 语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是 ...
- Python 常用内置函数map、zip、filter、reduce、enumerate
Python 中有许多非常实用的内置函数,通过这些函数我们可以方便的实现某些功能,下面就列举一些常用的内置函数. 1. map() 函数 map() 可以根据提供的函数对指定序列做映射,它接受一个函数 ...
- 将request中的所有参数存放到自定义的map中
/*** <获取参数map>* * @return 参数map* @throws Exception */protected Map<String, Object> getPa ...
- Map再整理,从底层源码探究HashMap
前言 本文为对Map集合的再一次整理.内容包括:Map HashMap LinkedHashMap TreeHashMap HashTable ConcurrentHashMap Map Map< ...
- Java集合详解之Map
一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...
最新文章
- mac下homebrew一些总结
- LETTers比赛第三场 --1003 大明A+B解题报告
- Oracle 12c应用连接VIP轮训负载均衡?
- python生成二维坐标点_Python numpy:根据坐标创建二维数组
- ygo游戏王卡组_游戏王:二线卡组脱颖而出的战将,混沌青眼卡组,仪式卡组的骄傲...
- App 留客率出炉:iPhone 大胜 Android!
- STM32 - CubeMX 的使用实例详细(01.1)- ST-LINK V2 的配置
- SAP License:CO07利润中心必输
- mysql数据库调优知识复习
- LeetCode刷刷记录
- 基于Springboot+vue的办公OA系统#毕业设计
- Maven镜像仓库替换为阿里云镜像仓库
- linux程序性能分析工具stap,《面向应用开发者的系统指南》CPU篇之使用systemtap分析进程的行为...
- BUUCTF刷题记录(持续更新中~)
- 02-FTP文件共享服务
- 绘制正态分布概率密度函数
- 关灯后灯常亮、微亮、闪烁——多种原因分析
- ubuntu error symbol ‘grub_calloc‘ not fount
- H5实现一键复制微信并打开微信跳转好友添加页
- 科创人·神州数码集团CIO沈旸:最佳实践模式正在失灵,开源加速分布式创新