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等等开发语言以及网络相关管理技术.哎,好久不 ...
随机推荐
- UVa 10881 Piotr's Ants (等价变换)
题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时, 它们同时掉头.给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态. 析:刚看到这个题时,一点思路也没有 ...
- Java static说明
class Person{ String name;//成员变量,实例变量 static String country = "CN";//静态变量.类变量 public void ...
- linux上安装tomcat
这里采用离线解压tar.gz的方式安装 下载: wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomc ...
- 自己动手绘制ToolBar
VC MFC工具栏(CToolBar)控件 工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来 ...
- OpenGL中位图的操作(glReadPixels,glDrawPixels等)
OpenGL中位图的操作 OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例). 1. BMP文件格式简单介绍 BMP文件是一种像素文件,它 ...
- 后台返回的json数据传到前端页面并在页面的表格中填充
web前端页面: <table id="myTable" cellpadding="1" cellspacing="0" border ...
- 微软儿童编程技术,kodu(酷豆)为儿童创造一个游戏世界
受微软青年星火项目组的邀请,我和微软项目组的朋友参加了一场针对儿童编程的技术指导. 儿童和编程,本来是两个完全不靠边的词.在大家的常规思维中,编程一直是软件开发人员的事情,是高科技类型的工作,高不可攀 ...
- C#开发微信小程序
个人见解,欢迎交流,不喜勿喷. 微信小程序相比于微信公众号的开发,区别在于微信小程序只请求第三方的数据,整个界面的交互(view)还是在微信小程序上实现,前后端完全分离,说白了,微信小程序开发与具 ...
- linux 下mysql/php编译配置参数
mysql cmake 编译参数 cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql \-DSYSCONFDIR=/opt/mysql/etc \-DMYSQL_DATAD ...
- 『原创』手把手教你搭建一个实用的油耗App(一)
前言: 入行快10年,有点积蓄,三年前买了代步车.于是乎,汽车油耗开销就成了每个月都必须关注的问题.三年来,用过了无数油耗记录软件,比如最知名的“小熊油耗”,从第一次用,一直到最新一版,感觉越来越“臃 ...