Java学习之路(九):Map集合
Map集合概述和特点
Map是属于java.util的一个接口Map<k,v>
- k:映射所维护的键的类型
- v:映射值的类型
Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map接口和Collection接口的不同
- Map是双列的,Collection是单列的
- Map的键唯一,Collection的Set是唯一的
- Map集合的数据结构只针对键有效,跟值无关
- Collection集合的数据结构是针对元素有效的
Map集合的功能概述
添加功能:
- V put(K key,V value):添加元素
- 如果键是第一次存储,直接存储元素,返回null
- 如果键不是第一次存储,就用本次存储的值将之前的值给替换掉,将以前的值给弹出
删除功能:
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
判断功能:
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
获取功能:
- V get(Object key):根据键获取值
- Set<K> KeySet():获取集合中所有键的集合
- Collection<V> values():获取集合中所有值的集合
长度功能:
- int size():返回集合中的键值对的个数
Map是一个接口,一般我们都是使用它的子类HashMap
HashMap使用注意事项
- 声明HashMap时的键值可以是任意对象
- 如果有重复的键,会把以前的替换
- 值可以为空(null)
- 键能为空
- put方法的返回值
- 如果键是第一次存值,就直接储存元素,返回null
- 如果键不是第一次存在,就用值把以前的值替换掉。返回以前的值
HashMap的一个简单的例子(第一种遍历方法:不推荐)
- package lesson0006;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
- public class Demo01 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Map<String,String> map = new HashMap<>();
- map.put("k1","v1");
- map.put("k2","v2");
- map.put("k3","v3");
- map.put("k4","v4");
- //获取所有的key
- Set<String> keys = map.keySet();
- for(String k:keys){
- String value = map.get(k);
- System.out.println("Key:"+k+"-Value:"+value);
- }
- }
- }
HashMap的另一个简单的例子(第二种遍历方法:推荐)-通过键值对对象(Entry)找键和值
- package lesson0006;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Set;
- public class Demo02 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Map<String,String> map = new HashMap<>();
- map.put("k1","v1");
- map.put("k2","v2");
- map.put("k3","v3");
- map.put("k4","v4");
- //获取所有的key
- Set<Entry<String, String>> entrySet = map.entrySet();
- for(Entry entryObj:entrySet){
- Object k = entryObj.getKey();
- Object value = entryObj.getValue();
- System.out.println("Key:"+k+"-Value:"+value);
- }
- }
- }
Entry的一些分析:
- Map.Entry是一个键值对对象
- Map.Entry是一个接口,它的实现类对象是HashMap$Node
- Map.Entry是有个key和value属性,通过get方法可以取值
- 我们遍历Entry的方法一般有迭代器和增强for循环
LinkedHashMap
特点:底层是链表实现的,所以可以保证怎么存就怎么取
HashMap和Hashtable的区别
- Hashtable是JDK1.0版本出现的,是线程安全的,所以也是效率低下的。
- HashMap是JDK1.2版本出现的,是线程不安全的,效率高
- Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
这里是补充的一点Collections工具类的概述和常见方法
Collections类的概述:是一个针对集合操作的工具类
Collections的成员方法:
- public static<T> void sort(List<T> list)
- public static<T> int binarySearch(List<?> list,T Key)
- public static<T> T max(Collection<?> coll)
- public static void reverse(List<?> list)
- public static void shuffle(List<?> list)
泛型补充:
? extends E(E的子类) 针对存的操作 ?表示子类,E表示父类
eg:ArrayList.addAll(Collection<? extends Father> c)
? super E(E的父类) 针对取的操作 ?表示父类,E表示子类
eg:ArrayList.sort(Comparator<? super Son> c)
Java学习之路(九):Map集合的更多相关文章
- Java学习笔记24(Map集合)
Map接口: Map接口与Collection接口无继承关系. 区别:Collection中的元素是孤立的,一个一个存进去的. Map作为一个映射集合,每一个元素包含Key-value对(键-值对). ...
- Java学习笔记【九、集合框架】
集合框架设计的目标: 高性能. 允许不同类型的集合,以类似的方式工作,有互操作性. 对一个集合的扩展和适应必须简单. 集合框架包含: 接口:代表集合的抽象数据类型. 实现(类):具体实现(ArrayL ...
- Java学习之路(六):集合
集合的由来 数组的长度是固定的,当添加的元素超过了数组的长度,就需要对数组重新定义 java内部给我们提供的集合类,能存储任意对象,长度是可以改变的.随着元素的增加而增加,随着元素的减少而减少 数组和 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Java学习之路(转)
Java学习之路(书籍推荐) 一.基础类 1.<Thinking in java>(阅读2遍),入门第一位是建立正确的概念 2.<Core Java>这本书更贴近实践,更多 ...
- 新篇章之我的java学习之路下
昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
- JAVA学习之路与大家分享
这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...
随机推荐
- java.lang.String cannot be cast to java.util.Date
我这个是个新建的功能,然后在保存的时候出现了这个错误.然后就找到了新建的action,发现其上的list方法出了问题. 这样是正确的.之前list<Constract>写成这样了.
- Win7下U盘安装CentOS-7-x86_64-DVD-1503-01
转载自:http://blog.sina.com.cn/s/blog_842d5c8a0102vr12.html 昨天在Win7下装CentOS7,本以为之前装CentOS6.5很熟练了,结合网上的帖 ...
- 配置 struts2 时掉进 web.xml 的坑
这个声明不好用 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quo ...
- Get异步请求
1: 使用代理 //1.delegate //创建url NSURL *url = [[NSURL alloc] initWithString:@"http:ima ...
- hdu 4946 凸包注意重点
http://acm.hdu.edu.cn/showproblem.php?pid=4946 给你n个点的坐标和速度,如果一个点能够到达无穷远处,且花费的时间是最少的,则此点输出1,否则输出0. 每个 ...
- codeforces 261B Maxim and Restaurant(概率DP)
B. Maxim and Restaurant time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- POJ1410_还是没考虑全面——线段是否与矩形有共同的垂直投影
题意如题目 有几个点1.怪我没读好题目:给出的矩形两个端点不一定都是左上右下,但是肯定能勾勒出一个矩形. 2.现在才发现很多线段相交的判断我都没有仔细考虑这一个问题 bool ssinsert(Poi ...
- [PHP-Debug] 使用 php -l 调试 PHP 错误遇到的坑
有时候,因为系统代码的增加,造成很多文件的相互关联,又或者某些第三接口(微信等),你必须要在线上调试. 线上环境,我们都是设置 “ini_set('display_errors' , false)” ...
- 深入研究java.lang.Process类
一.概述 Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序). Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态 ...
- 客户端Git代码的下载与提交
(1)git clone 服务器用户名@服务器IP:~/Git目录/.git 功能:下载服务器端Git仓库中的文件或目录到本地当前目录. (2)对Git目录中的文件进行修改. (3)git statu ...