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等等开发语言以及网络相关管理技术.哎,好久不 ...
随机推荐
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testService' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testService' is defi ...
- UVa 1638 Pole Arrangement (递推或DP)
题意:有高为1,2,3...n的杆子各一根排成一行,从左边能看到L根,从右边能看到R根,求杆子的排列有多少种可能. 析:设d(i, j, k)表示高度为1-i的杆子排成一行,从左边看到j根,从右边看到 ...
- No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
20235 [http-bio-8080-exec-10] INFO o.a.shiro.realm.AuthorizingRealm - No cache or cacheManager prope ...
- 判断tableVIew滑动的方向
首先设置一个旧的偏移量为0; self.oldContent = 0; - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scr ...
- struts2和JSON的数据交互
一.实验环境 1.struts2基本包 2.json-plugin 在struts2的lib下可以找到. 3.web.xml 加入struts2 <filter> <filter-n ...
- Codeforces805 C. Find Amir 2017-05-05 08:41 140人阅读 评论(0) 收藏
C. Find Amir time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- 老刘 Yii2 源码学习笔记之 Module 类
关系类图 从上图可以看出 Application 类继承了 Module,在框架中的是非常重要角色. 加载配置 public function setModules($modules) { forea ...
- SSH中设置字符编码防止乱码
1.在web.xml中加入一个过滤器和过滤范围的配置 <filter><filter-name>encoding</filter-name><filter-c ...
- Unity3D规则之Unity Root Motion / Bake into Pose 的问题
参考: http://ru.unity3d-docs.com/Documentation/Manual/Animator.html http://ru.unity3d-docs.com/Documen ...
- memcached分布式缓存系统
在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时 ...