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 ...
随机推荐
- Java学习的第九天
1.双色球联系: 对象的创建和使用 2.静态没太明白. 3.明天学习java 的方法
- Git撤销文件修改
在旧版本中,git的撤销工作区的文件修改是用git checkout -- <file>命令,由于容易漏了--导致和切换分支混肴,所以新版本中: - 使用git restore (--wo ...
- let声明的全局变量不是window对象属性
今天在控制台写删除数组第一个元素的代码时,发现了一个问题,以下是书中源码, let arr = [1,2,3,4,5] Array.prototype.reIndex = function (myAr ...
- 使用 .NET 5 体验大数据和机器学习
翻译:精致码农-王亮 原文:http://dwz.win/XnM .NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验.微软发布了与 .NET 协作的大数据(.NET ...
- 二、多线程及服务器编程总结------linux多线程服务端编程
- select的限制
/*一.select实现并发服务器并发的两点限制 1.一个进能够打开的最大文件描述符限制.可以通过两种方式修改 ulimit -n :获取最大文件描述符个数 ulimit -n 2048:修改为204 ...
- binary hacks读数笔记(ld 链接讲解 二)
这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起 ...
- Mysql数据安全备份
数据安全备份的意义 在出现意外的时候(硬盘损坏.断点.黑客攻击),以便数据的恢复 导出生产的数据以便研发人员或者测试人员测试学习 高权限的人员那操作失误导致数据丢失,以便恢复 备份类型 完全备份:对整 ...
- 我的开源经历:为了方便处理三方 HTTP 接口而写的 Java 框架
缘起 我以前公司需要在 Java 后台调用许多第三方 HTTP 接口,比如微信支付.友盟等等第三方平台. 公司内部还有很多服务是用世界最好语言写的,接口自然也只能通过 HTTP 接口来调用.于是日积月 ...
- Linux文件监控工具——inotify-tools
举例: ip.txt内容如下: 10.1.1.11 root 123 10.1.1.22 root 111 10.1.1.33 root 123456 10.1.1.44 root 54321 写法1 ...