56. Map(双列集合)
在生活中有些数据是以映射关系存在的,也就是成对出现的,比如:老公 老婆(key-->value)
双列集合:
-------------------| Map 如果是实现了Map接口的集合类,集合类具备的特点是:存储的数据是以键值对存在的,键不可重复,值可重复
-------------| HashMap 底层是基于哈希表实现的
HashMap的实现原理:
往HashMap添加元素的时候,HashMap会自动先调用元素的hashCode方法得到元素的哈希表,
然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置
情况一:如果算出元素的存储位置目前还没有元素,那么该元素可以直接存储到该位置
情况二:如果算出元素的存储位置已经存在其他元素,那么会自动调用equals方法再进行比较一次
如果equals返回ture那么就视为重复元素,不可添加,如果返回false,那么就可以添加
-------------| TreeMap 底层是基于红黑树实现的(二叉数),特点:会跟元素排序(key值,而不是value值排序)
TreeMap注意事项:
1.TreeMap在添加元素的时候,如果数据有自然排序规则,那么就按照元素的自然顺序的特性进行排序存储
2.TreeMap在添加元素的时候,如果数据不具备自然排序规则,那么该元素所属类必须实现Comparable接口,把元素的比较规则写在compareTo方法上
3.TreeMap在添加元素的时候,如果元素本身不具备自然数据特性,而元素也没有实现Comparable接口,那么必须要在创建ThreeSet的时候传入一个比较器
4.如果比较元素的时候调用compareTo返回的是0,那么该元素就被视为重复元素,不可添加(注意:跟hashcode和equals无关)
-------------| Hashtable(了解) 底层也是维护了一个哈希表,不过它的线程安全,但效率低
Map<K,V>的常用方法:
添加:
put(K key, V value)
添加的时候,如果不存在添加的key值,那么添加成功后返回null
如果存在添加的key值,那么会替换原先的value值,并返回原来的value
putAll(Map<? extends K,? extends V> m)
把另一个集合的数据添加到指定的集合中,如果两个集合中存在相同的key值,
那么会跟put方法一样,但是没有返回值
删除:
clear() 清空集合
remove(Object key) 根据键删除数据,并返回此key所对应的value(因为键值不允许重复)
判断:
containsKey(Object key) 根据key判断集合中是否存在指定的键值对
containsValue(Object value) 根据value判断集合中是否存在指定的键值对
isEmpty() 判断集合是否为空
获取:
get(Object key) 根据键获取对应的值
size() 判断集合中键值对的大小
迭代:
values() 返回此映射中包含的值的 Collection 视图
keySet() 返回此映射中包含的键的 Set 视图
entrySet() 返回此映射中包含的映射关系的 Set 视图。
下面是一些方法的实例
put(K key, V value)
添加的时候,如果不存在添加的key值,那么添加成功后返回null
如果存在添加的key值,那么会替换原先的value值,并返回原来的value
public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>();
String old = map.put("老公", "老婆");
System.out.println(old);
System.out.println(map);
//修改后
String news = map.put("老公", "小三");
System.out.println(news);
System.out.println(map);
}
putAll(Map<? extends K,? extends V> m)
把另一个集合的数据添加到指定的集合中,如果两个集合中存在相同的key值,
那么会跟put方法一样,但是没有返回值
public class Demo6 {
public static void main(String[] args) { Map<String, String> map1 = new HashMap<String, String>();
String old = map1.put("老公", "小三"); Map<String, String> map2 = new HashMap<String, String>();
String news = map2.put("老公", "老婆");
System.out.println("添加前:"+map2);
//把map1添加到map2中
map2.putAll(map1);
System.out.println("添加后:"+map2);
}
}
56. Map(双列集合)的更多相关文章
- Map(双列集合)
出现的原因:现实生活中有些数据成对存在. 特点:键不可重复,值可以重复. ----------|Map 数据都是以键值对的形式存在,键唯一,值可重复. --------- ...
- (10)集合之双列集合Map,HashMap,TreeMap
Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...
- 双列集合Map
1.双列集合Map,就是存储key-value的键值对. 2.hashMap中键必须唯一,值可以不唯一. 3.主要方法:put添加数据 getKey---通过key获取数据 keySet- ...
- Map集合——双列集合
双列集合<k, v> Map: Map 和 HashMap是无序的: LinkedHashMap是有序的: HashMap & LinkedHashMap: put方法: 其中,可 ...
- 双列集合Map的嵌套遍历
双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂.例如一个集合:HashMap<Integer,HashMap<String,Inte ...
- Map集合(双列集合)
Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...
- Java之Map接口(双列集合)
Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...
- Day 9:双列集合Map及实现该接口的类的常用方法
为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口 如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接 ...
- Java中的集合(七)双列集合顶层接口------Map接口架构
Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...
随机推荐
- MAVEN项目标准目录结构(转)
转自:http://blog.csdn.net/lengyue_wy/article/details/6718637 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.标准目录结构: s ...
- 【机器学习实验】scikit-learn的主要模块和基本使用
[机器学习实验]scikit-learn的主要模块和基本使用 引言 对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的.在从事数据科学的人中,最常用的工具就是R和Python ...
- ArrayList详解,底层是数组,实现Serializable接口
一.对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器往ArrayList中添加对象:即add(E)方法获取ArrayList中的单个对象:即get(int index)方法 ...
- 07-图5 Saving James Bond - Hard Version(30 分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
- JMeter 阶梯式加压测试插件 Concurrency Thread Group
jmeter阶梯式加压测试:JMeter 阶梯式加压测试插件 Stepping Thread Group 由于Stepping Thread Group插件相对来说过于老旧,已不被官方所推荐. 所以这 ...
- [CSP-S模拟测试]:玄学题/c(数学)
题目传送门(内部题40) 输入格式 第一行:两个正整数$n$.$m$. 输出格式 第一行:一个整数,代表式子的值. 样例 样例输入1: 4 5 样例输出1: 0样例输入2: 799 8278 样例输出 ...
- [CSP-S模拟测试67]题解
时隔多年,终于又有了一套我能改完的题…… A.神炎皇 遇到这种要求整除的题显然拆出gcd 设$d=gcd(a,b)\ \ \ a'=\frac{a}{d} \ \ \ b'=\frac{b}{d}$ ...
- ASP.NET MVC 随手记
ViewBag: 本质上市一个字典,提供了一种View可以访问的动态数据存储.这里用到了.NET 4.0的动态语言特性.可以给ViewBag添加任意属性,并且这个属性是动态创建的,不需要修改类的定义就 ...
- css 布局(圣杯、双飞翼)
一. 圣杯布局. 左右固宽,中间自适应 三列布局,中间宽度自适应,两边定宽: 中间部分要在浏览器中优先展示渲染: 具体步骤:1.设置基本样式2.圣杯布局是一种相对布局,首先设置父元素container ...
- 2018icpc南京/gym101981 G Pyramid 找规律
题意: 数一个金字塔里面有多少个正三角形. 题解: ans[n]=n*(n-1)*(n-2)*(n-3)/24 #include<bits/stdc++.h> using namespac ...