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等等开发语言以及网络相关管理技术.哎,好久不 ...
随机推荐
- html零碎总结
对于引用外部css时,格式是<link href="location" rel="stylesheet"/>,注意rel一定不能少且写成自闭合. 而 ...
- (KMP)Count the string -- hdu -- 3336
http://acm.hdu.edu.cn/showproblem.php?pid=3336 Count the string Time Limit: 2000/1000 MS (Java/Other ...
- ploymer
developer guide 接下来看声明属性 声明属性 声明属性时,可设定的参数 type:属性反序列化 value:[function(){}],配置属性默认值 readonly refle ...
- 【PAT Advanced Level】1014. Waiting in Line (30)
简单模拟题,注意读懂题意就行 #include <iostream> #include <queue> using namespace std; #define CUSTOME ...
- Java web 调试技巧之查看浏览器中调试中的network
在java web开发过程中尤其后台开发经常需要查看浏览器调试中的network项:今天在开发在线预览系统时用到了flexpaper插件,这个插件会调用FlexPaperViewer.swf这个软件( ...
- Americans are usually tolerant (Listen speak of Unit 2)
Americans are usually 1) tolerant of non-native speakers who have some 2) trouble understanding Engl ...
- PO Release Final Closed 灾难恢复
今天不小心 Final Closed了一条Po Release,只能通过后台更新数据恢复了. 更新后可接收可匹配,但不保证更新数据有遗漏,慎用. 更新前备份各表数据 UPDATE PO_LINE_LO ...
- Python学习-41.Python中的断言
先来点题外话: 在现代编程开发中,TDD(测试驱动开发)变得越来越流行(PS:DDD(领域驱动开发)也是,但两者并不冲突,就像面向过程和面向对象).而作为TDD的根本——单元测试也是越来越重要,单元测 ...
- 基于MVC框架Aspose.Words打印到Word中写法
控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 //前端打印写法 @{ ViewBag.Title = " ...
- C#操作字符串之常用函数总结
1:使用string.Join 泛型集合快速转换拼接字符串. 2:使用 string.Split 将字符串截断转换成字符数组. 3:使用 string.Substring,string.Remove ...