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使用注意事项

  1. 声明HashMap时的键值可以是任意对象
  2. 如果有重复的键,会把以前的替换
  3. 值可以为空(null)
  4. 键能为空
  5. put方法的返回值
    1. 如果键是第一次存值,就直接储存元素,返回null
    2. 如果键不是第一次存在,就用值把以前的值替换掉。返回以前的值

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集合的更多相关文章

  1. Java学习笔记24(Map集合)

    Map接口: Map接口与Collection接口无继承关系. 区别:Collection中的元素是孤立的,一个一个存进去的. Map作为一个映射集合,每一个元素包含Key-value对(键-值对). ...

  2. Java学习笔记【九、集合框架】

    集合框架设计的目标: 高性能. 允许不同类型的集合,以类似的方式工作,有互操作性. 对一个集合的扩展和适应必须简单. 集合框架包含: 接口:代表集合的抽象数据类型. 实现(类):具体实现(ArrayL ...

  3. Java学习之路(六):集合

    集合的由来 数组的长度是固定的,当添加的元素超过了数组的长度,就需要对数组重新定义 java内部给我们提供的集合类,能存储任意对象,长度是可以改变的.随着元素的增加而增加,随着元素的减少而减少 数组和 ...

  4. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

  5. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  6. Java学习之路(转)

    Java学习之路(书籍推荐)   一.基础类 1.<Thinking in java>(阅读2遍),入门第一位是建立正确的概念 2.<Core Java>这本书更贴近实践,更多 ...

  7. 新篇章之我的java学习之路下

    昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...

  8. java学习之路之javaSE基础2

    java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...

  9. JAVA学习之路与大家分享

    这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...

随机推荐

  1. 【转】web应用缓慢故障分析

    在这以后里分享一篇关于web应用缓慢的分析过程,感觉挺有用的. 原文出处:http://xjsunjie.blog.51cto.com/999372/751585 友在一家购物网站做运维不久,今日打电 ...

  2. nginx 配置图片服务器 (window版本)

    配置nginx二级域名 ①找到配置文件 例如:%nginx_home%/conf/nginx.conf ②配置 #user nobody; worker_processes 1; #error_log ...

  3. (最小生成树 次小生成树)The Unique MST -- POJ -- 1679

    链接: http://poj.org/problem?id=1679 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...

  4. android java层实现hook替换method

    Android上的热修复框架 AndFix 大家都很熟悉了,它的原理实际上很简单: 方法替换——Java层的每一个方法在虚拟机实现里面都对应着一个ArtMethod的结构体,只要把原方法的结构体内容替 ...

  5. 解决 multiple definition of

    总结了解决multiple definition of的方法: 问题原因:    当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译#ifndef TEST_H#define TEST_H ...

  6. shell 脚本 批量修改文件名

    修改文件名前 #!/bin/bask # for a in $( ls /etc/yum.repos.d/CentOS* );do if [ $a != '/etc/yum.repos.d/CentO ...

  7. 逆着得最长路POJ1797

    POJ1797点击打开链接 这个题很是不错我感觉 很容易把这个题和上一个青蛙跳的题联系起来做,我也确实联系起来了,可还是没能完整得Ac,是因为我的算法思路还是最短路,这里错了 这个题目得要求是,从1到 ...

  8. 万能的ctrl+shift+F(Element 'beans' cannot have character [children], because the type's content type is element-only.错误)

    今天在spring-servlet.xml文件中出现了一个莫名其妙的错误:Element 'beans' cannot have character [children], because the t ...

  9. jquery.cookie.js 删除cookie

    简单交代一下背景:asp.net页面的上的切换登录按钮的点击事件实现cookie的删除. 但是好像没办法直接删除,通过网上提供的方法,可以使用jquery.cookie.js 来操作cookie的创建 ...

  10. ASP.NET网页VS利用文件系统发布

    1.点击发布 2.选择发布方式,这里选择文件系统,并选择发布的路径 3.配置相关参数 4.点击发布按钮 5.发布成功后文件夹下生成的文件 ..