Map

返回类型 方法 描述
V get(Object key) 根据key取得value
V put(Obejct k,Object v) 向Map中加入(替换)元素,返回之前的Value;之前没有元素就返回null
V remove(Object key) 根据key删除元素,返回Value对应的value
void clear() 清空
int size() 获得集合的长度
boolean isEmpty() 判断是否为空
boolean containsKey(Object object) 判断指定的key是否存在
boolean containsValue(Object value) 判断指定的value是否存在
Set keySet() 所有key的集合
Collection values() 所有value

HashMap

存储K-V,使用key来区分。

import java.util.*;
public class TestHashMap {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
// 新k返回null,旧k返回旧v
String put = map.put(1, "A");
System.out.println("之前没有此K的V:" + put);
put = map.put(1, "B");
System.out.println("之前有同K的V:" + put);
System.out.println(map);
// get:有k返回v,无k返回null
String v = map.get(2);
System.out.println(v);
v = map.get(1);
System.out.println(v);
// containsKey/containsValue
boolean containsKey = map.containsKey(2);
boolean containsValue = map.containsValue("B");
// remove:删k返回v;删无可删,返回null
String remove = map.remove(2);
System.out.println(remove);
remove = map.remove(1);
System.out.println(remove);
}
}

遍历:

package ah;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class TestMap1Hash {
public static void main(String[] args) {
Map<String, String> _map = new HashMap<String, String>();
_map.put("1", "悟空");
_map.put(null, "白龙");
_map.put("2", "悟能");
_map.put("3", "悟净");
System.out.println("------foreach语法遍历map(输出K-V)------");
for (String _key : _map.keySet()) {
System.out.print("key = " + _key);
System.out.println(" value = " + _map.get(_key));
}
System.out.println("------Java 8.forEach:Lambda------");
_map.forEach((k, v) -> System.out.println(k + ":" + v));
System.out.println("------使用迭代器迭代map(输出V)------");
// 1.获取值的Collection
Collection<String> _values = _map.values();
// 2.通过Collection获得迭代器
Iterator<String> it = _values.iterator();
// 3.输出值
while (it.hasNext()) {
String next = it.next();
System.out.println(next);
}
System.out.println("-----Map.Entry<K,V>-----");
// Map.Entry<K,V>是Map的内部接口,称为映射项(键-值对)
Set<Entry<String, String>> entrySet = _map.entrySet();
System.out.println("=====Map.Entry<K,V>:for循环=====");
for (Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("=====Map.Entry<K,V>:迭代器=====");
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, String> next = iterator.next();
System.out.println(next.getKey() + ":" + next.getValue());
}
}
}

LinkedHashMap

自带链表(记录元素顺序),具有可预知的迭代顺序。


Hashtable (不接受null)

Hashtable是一个比较老的类,甚至没有遵循Java命名规范。尽量少用。

但是Hashtable有一个重要的子类——java.util.Properties。

public class Properties extends Hashtable<Object,Object> {...}

父以子贵,尽管Hashtable连命名都不规范,还是不会被淘汰。Properties类会在IO章节中介绍。


Hashtable是同步的,速度较慢。

两个map使用上是基本一致,但是Hashtable限制性更强一些,K和V都不接受null——

  • 不接受
  • 不提示
  • 运行时出错
// X  m.put(null, "NNN");
// X m.put("NNN", null);

HashMap对比Hashtable:

null键 null值 重复键
HashMap ×
Hashtable × × ×

JAVA 9:of方法

List接口、Set接口、Map接口里增加静态方法of,用于初始化集合。

集合元素个数不可变,添加新元素会抛出UnsupportedOperationException

of方法只适用于接口,不用于实现类。

Set、Map调用of方法时不能有重复的元素,如果重复会抛出IllegalArgumentException(不合法参数异常)

import java.util.*;
public class TestJ9of {
public static void main(String[] args) {
List<String> lst = List.of("a", "b");
// lst.add("c");//UnsupportedOperationException
System.out.println(lst);
// lang.IllegalArgumentException: duplicate element: a
Set<String> set = Set.of("a", "b");
// Set<String> set = Set.of("a", "b","a");
System.out.println(set);
Map<Integer, String> map = Map.of(1, "A", 2, "B");
System.out.println(map);
}
}

Java基础教程——Map的更多相关文章

  1. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  2. Java基础教程:多线程基础(4)——Lock的使用

    Java基础教程:多线程基础(4)——Lock的使用 快速开始 Java 5中Lock对象的也能实现同步的效果,而且在使用上更加方便. 本节重点的2个知识点是:ReentrantLock类的使用和Re ...

  3. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

  4. Java基础教程:HashTable与HashMap比较

    Java基础教程:HashTable与HashMap比较 1.  关于HashMap的一些说法: a)  HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...

  5. Java基础教程:枚举类型

    Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...

  6. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  7. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  8. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  9. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

随机推荐

  1. 码农会锁,synchronized 对象头结构(mark-word、Klass Pointer)、指针压缩、锁竞争,源码解毒、深度分析!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 感觉什么都不会,从哪开始呀! 这是最近我总能被问到的问题,也确实是.一个初入编程职场 ...

  2. 关于cookie与本地 存储的区别的问题。

    关于cookie与本地 存储的区别的问题. 1. cookie在浏览器和服务器间来回传递.而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存. 2. coo ...

  3. 排名靠前的几个JS框架发展趋势和前景

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/top-5-javascript-frameworks ...

  4. Java学习的第三十八天

    例3.4. package bgio; public class cjava { public static void main(String[]args) { int i=1; int sum=0; ...

  5. vue+el-table在ajax分页时支持全选单页和全选所有

    需求:el-table中,ajax分页的情况下,要支持全选单页和全选所有页中的记录,效果如下图所示: 界面代码:           <el-table :data="tableDat ...

  6. MySQL主主数据同步

    环境 操作系统版本:CentOS 6.5 64位MySQL版本:mysql5.6节点1IP:192.168.0.235 主机名:taojiang1-mysql-01节点2IP:192.168.0.23 ...

  7. 2018-12-8 论文翻译+hdoj+git+python

    今天干的事不多,明天得把实验写了. 论文翻译了摘要.0.5h hdoj 五道水题.注意while(cin>>char&&char != '\n')没用.可用ch = cin ...

  8. c++11-17 模板核心知识(二)—— 类模板

    类模板声明.实现与使用 Class Instantiation 使用类模板的部分成员函数 Concept 友元 方式一 方式二 类模板的全特化 类模板的偏特化 多模板参数的偏特化 默认模板参数 Typ ...

  9. 巧用IDM工具 快捷下载ASTER GDEM v3高程数据

    ASTER GDEM v3是NASA推出的30米高清DEM,覆盖了几乎全部的地球陆地.那么,在NASA官网怎么下载ASTER GDEM v3的地形高程数据呢? 首先,你需要注册一个nasa的账号 注册 ...

  10. VBA_Copy数据及数据格式_DoLoop删除空行

    Sub copyreport() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Ap ...