Map接口的再学习
来源:互联网 发布:陈坤孩子的母亲知乎 编辑:程序博客网 时间:2024/06/04 00:39
(存储一对一对的对象)中每一个元素不是一个对象,而是一个键对象和值对象组成的键值对(Key-Value)。
Key-Value是一个键不重复值可重复的集合。(典型的例子是字典:通过页码的key值找字的value值,k那一页对应多个汉字v)。
键不重复,因为(HashMap的键要比较是否相等来存值,TreeMap的键要比较大小来存值),
HashMap无序(HashMap存数据的位置是根据数据哈希值算出来的位置);
TreeMap有序(通过键比出来的从小到大)
SortedMap接口:如果一个Map可以根据key值排序,则称其为SortedMap。(如字典)
Map的子接口,TreeMap的直接父类
java.util.HashMap
========================================
* 哈希表,散列表 * 存放“键-值”/"名-值"对数据
* 作用:快速查找数据 * 用“键”获得对应的“值”
* 键:
*) 键不允许重复,键相同值被覆盖
*) 无序 往里放的数据是散列乱序存放的根据内部的哈希/散列算法计算出数据存放的位置)
*) 这个键必须同时重写 hashCode() 和 equals() 2个方法
*) 如果 equals() 相等(即属性相同),那么hashCode() 必须相等(属性相同)
*) 如果 hashCode() 相等(根据属性计算出来的值相等),
equals() 不一定相等(那么属性不一定相等)
创建对象
-----------------------------------
HashMap map = new HashMap();
方法
-----------------------------------
put(k, v) 放入键值对数据
get(k) 用键获得对应的值
remove(k) 移除指定的键和它的值
containsKey(key)是否包含指定的键
containsValue(value)是否包含指定的值
size() 有多少对数据
clear() 清空
keySet() 获得一个 Set 类型集合,包含所有的键
values() 获得集合,包含所有的值
entrySet() 获得一个 Set 类型集合,包含所有Entry
哈希算法
-------------------------------------
存放数据
---------------------------------
1. 调用key的hasCode()方法获得键的哈希值
2. 用哈希值计算下标值 index
3. 新建Entry对象来封装键和值
3.1如果数据的数量达到一定的负载率(75%)容量会翻倍;
4. 将 Entry 对象放入该index位置
4.1. 如果该index是空位置,直接放入
4.2. 如果该index位置已经有Entry对象了
4.2.1.那么依次得用equals()与该位置Entry对象的键比较是否相等
4.2.1.1. 如果找到键相等的覆盖掉原来的值
4.2.1.2. 如果没有找到键相等的,那么把Entry对象挂在一起形成链表
这样唯一的index位置可能存有很多个Entry对象
这样在该index位置找某个Entry对象的时候效率就低了
查找数据
------------------------------------------
1. 调用key的hasCode()方法获得键的哈希值
2. 用哈希值计算下标值 index
3. 如果该index是空位置,直接返回null
4. 如果该index位置已经有Entry对象了
4.2.1.那么依次得用equals()与该位置每个Entry对象的键比较是否相等
4.2.1.1. 如果找到键相等的返回该值
4.2.1.2. 如果没有找到键相等的,返回null
HashMap 与HaShTable的区别.
HashMap是非线程安全的容器,允许键和值为null
Hashtable是线程安全的容器,不允许键和值为null
TreeMap
======================================
* 二叉树、红黑树 * 存放“键-值”对数据
* 作用:快速查找数据 * 用“键”获得对应的“值”
* 键:
*) 不能重复
*) 有序,从小到大
*) 不允许 null 值,因为要比较大小
*) 比较大小:
*) 键(被存储对象可以选择)实现 Comparable 接口
*) 在 TreeMap 上外接 Comparator 比较器对象指定排序规则二者都有时优先执行比较器
创建对象
------------------------------------
1. TreeMap map = new TreeMap();
2. TreeMap map = new TreeMap(比较器对象);
外接一个比较器对象,是comparator的
方法
------------------------------------
与 HashMap 相同的方法
HashMap、TreeMap和二分法 3种快速查找数据的算法
HashMap VS TreeMap:一般使用HashMap,排序的时候使用TreeMap。
LinkedHashMap:
保证集合中key的添加顺序。
HashTable :
线程安全的HashMap (方法和HashMap中基本相同,只是多线程锁修饰符)
Properties :
继承了HashTable,是HashTable的一个子类。
HashMap VS Hashtable:(注意在这里table的第一个字母小写)之间的区别有些类似于ArrayList和Vector,Hashtable(出现的早,线程安全)是重量级的组件,在考虑并发的情况,对安全性要求比较高的时候使用。Map的运用非常的多。使用HashMap(),如果使用自定义类,一定要覆盖HashCode()和equals()。
- Map接口的再学习
- Map深入学习(一)Map接口简介
- Map接口的使用。。。
- Map接口的使用
- Map接口的应用
- Java集合Map接口学习
- Java集合Map接口学习
- Java学习笔记--Map接口
- Collectoin接口与Map接口的区别
- Map接口下的集合
- Map接口下的集合
- Map接口的实现类
- Map接口的使用注意事项
- Map接口的基本方法
- Map的接口实现类型
- Map接口的使用注意事项
- Java 学习笔记(0x13) Map 接口
- 共同学习Java源代码-数据结构-Map接口
- Android自定义View(二)——常用工具
- 【Android】GreenDao 3.X 结合Volley以及Gson、ImageLoader实现数据存储
- 洛谷 P1852 奇怪的字符串
- Java实现DES加密解密
- bzoj 1082: [SCOI2005]栅栏 (二分+dfs)
- Map接口的再学习
- 深入理解Java内存(图解)
- javascript基础笔记(十四)之js的全局函数
- java--java连接数据库
- Unsupported major.minor version 51.0解决办法
- Linux用户管理的笔记
- Set接口的再学习
- crate源码
- 给 iOS App 开发者的 39 个开源的 Swift UI 库