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. spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入

    一.配置注解读取配置文件         (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值   实例:           @PropertySource(val ...

  2. 揭开AutoRun功能的神秘面纱

    有很多光盘放入光驱就会自动运行,它们是怎么做到的呢?光盘一放入光驱就会自动被执行,主要依靠两个文件,一是光盘上的AutoRun.inf文件,另一个是操作系统本身的系统文件之一的Cdvsd.vxd.Cd ...

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

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

  4. ISO 8895-1

    https://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout http://czyborra.com/charsets/

  5. Node.js是什么[译]

    当我向人们介绍Node.js的时候,一般会有两种反应:多数立刻表示“哦,这样啊”,另外的则会感到困惑. 如果你是第二种的话,我会试着这样解释node: 这是一个命令行工具.你可以下载一个tar包,然后 ...

  6. (最小生成树)Constructing Roads -- poj -- 2421

    链接: http://poj.org/problem?id=2421 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2113 ...

  7. List<T>用法

    所属命名空间:System.Collections.Generic public class List<T> : IList<T>, ICollection<T>, ...

  8. [调试]VS2013调试时提示“运行时当前拒绝计算表达式的值”

    VS2013 下单元测试调试时遇到的问题,以前倒从未遇到过. 中文关键字在百度和谷歌中搜索均无果. Google 下搜索 “The runtime has refused to evaluate th ...

  9. c# .net中的简单Job

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. xt

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...