Java基础教程——Map
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的更多相关文章
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...
- Java基础教程:多线程基础(4)——Lock的使用
Java基础教程:多线程基础(4)——Lock的使用 快速开始 Java 5中Lock对象的也能实现同步的效果,而且在使用上更加方便. 本节重点的2个知识点是:ReentrantLock类的使用和Re ...
- Java基础教程:面向对象编程[2]
Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- Java基础教程:枚举类型
Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础教程(12)--深入理解类
一.方法的返回值 当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
随机推荐
- Mybatis---07Mybatis配置文件浅析(五)
1.environments:MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做.例如,开发.测试和生产环境需要有不同的配置: ...
- centos7安装mongodb4.0教程
1.配置软件仓库: vim /etc/yum.repos.d/mongodb-org-4.0.repo [mongodb] name=MongoDB baseurl=https://repo.mong ...
- python构造函数和析构函数
构造函数和析构函数 关注公众号"轻松学编程"了解更多. 1.构造方法的使用 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为__init__()的特殊方法(构造方 ...
- graph generation model
Generative Graph Models 第八章传统的图生成方法> The previous parts of this book introduced a wide variety of ...
- JVM学习(五) -执行子系统
虚拟机和物理机的区别.两种都有代码执行能力.物理机的执行引擎是建立在处理器.硬件.指令集和操作系统上.而虚拟机的执行引擎是有自己实现的.因此可以自行的制定指令集和执行引擎的结构关系. 个人理解:分为三 ...
- 1.python的函数参数传递
1 Python的函数参数传递 看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun ...
- C的输入&输出
格式说明符 输出 %d整型输出,%ld长整型输出, %o以八进制数形式输出整数, %x以十六进制数形式输出整数,或输出字符串的地址. %u以十进制数输出unsigned型数据(无符号数).注意:%d与 ...
- Reactor中的Thread和Scheduler
目录 简介 Thread多线程 Schedule定时器 Schedulers工具类 publishOn 和 subscribeOn publishOn subscribeOn 简介 今天我们要介绍的是 ...
- Flink的sink实战之四:自定义
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- MobaXterm 连接 VirtualBox 6 虚拟机中的 CentOS 7
1 运行环境 本机系统:Windows 7 虚拟机软件:Oracle VM VirtualBox 6 虚拟机系统:CentOS 7 MobaXterm(安装在本机上) 2 MobaXterm - 远端 ...