JavaSE_09_Map
1.1 概述
Collection
中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。Map
中的集合,元素是成对存在的(Key---Value)。每个元素由键与值两部分组成,通过键可以找对所对应的值。Collection
中的集合称为单列集合,Map
中的集合称为双列集合。需要注意的是,
Map
中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
1.2 Map常用子类
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
1.3 Map接口中的常用方法
public V put(K key, V value)
: 把指定的键与指定的值添加到Map集合中。(如果map中已经存在这个元素,则覆盖他的值,并返回覆盖的值)public V remove(Object key)
: 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。public V get(Object key)
根据指定的键,在Map集合中获取对应的值。boolean containsKey(Object key)
判断集合中是否包含指定的键。public Set<K> keySet()
: 获取Map集合中所有的键,存储到Set集合中。(可用于遍历集合)public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。(可用于遍历集合)
1.4 Map集合遍历
public Set<K> keySet()
: 获取Map集合中所有的键,存储到Set集合中。(可用于遍历集合)
通过获得所有的Key,遍历Key来获得Value
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("hdh",1);
map.put("xj",2); Set<String> strings = map.keySet();
for (String string : strings) {
System.out.println("Key:"+string+" "+"Value:+"+map.get(string));
}
}
1.5 Entry键值对对象
当Map集合创建时Entry对象就创建了,Entry()的每一项就是Map的一对Key-Value,通过遍历Entry对象,就可以遍历Map
public K getKey()
:获取Entry对象中的键。public V getValue()
:获取Entry对象中的值。public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("hdh",1);
map.put("xj",2);
Set<Map.Entry<String, Integer>> set = map.entrySet();
for (Map.Entry<String, Integer> entry : set) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
1.6 HashMap存储自定义类型键值
当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。
如果要保证map中存放的key和取出的顺序一致,可以使用
java.util.LinkedHashMap
集合来存放。
package com.hdh.map; import java.util.Objects; public class Person {
private String name;
private Integer age; @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name) &&
Objects.equals(age, person.age);
} @Override
public int hashCode() { return Objects.hash(name, age);
} //get,set,tostrong,构造函数省略
}
1.7 LinkedHashMap
在HashMap的基础上增加了链表,保证Map的有序
1.8 Map集合练习
使用HashMap完成:获取一个字符串中对应字母出现的次数
解读:通过MapKey唯一,Value不唯一的特点进行遍历。
public class MapTest {
public static void main(String[] args) {
//友情提示
System.out.println("请录入一个字符串:");
String line = new Scanner(System.in).nextLine();
// 定义 每个字符出现次数的方法
findChar(line);
}
private static void findChar(String line) {
//1:创建一个集合 存储 字符 以及其出现的次数
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
//2:遍历字符串
for (int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
//判断 该字符 是否在键集中
if (!map.containsKey(c)) {//说明这个字符没有出现过
//那就是第一次
map.put(c, 1);
} else {
//先获取之前的次数
Integer count = map.get(c);
//count++;
//再次存入 更新
map.put(c, ++count);
}
}
System.out.println(map);
}
}
JavaSE_09_Map的更多相关文章
随机推荐
- Ubuntu下github pages+hexo搭建自己的博客
hexo 是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在github上.Hexo简单优雅, 而且风格多变, 适合搭建个人博客,而且支持多平台的搭建. 平台 Ubuntu14.04 ...
- python安装requests第三方模块
2018-08-28 22:04:51 1 .下载到桌面后解压,放到python的目录下 ------------------------------------------------------- ...
- 本地项目通过 git 同步到 github
1. github创建仓库并克隆仓库地址 2. 在本地通过git命令:git clone <仓库地址> 生成github仓库文件夹 3. 将本地项目复制到该文件夹 4. 通过git命令:g ...
- 关于ueditor 文本框
遇到一个问题,需要将从ueditor中的获得的带格式的文本,从数据库中取出,在放回到 ueditor中去,但是 文本中\n总是截断字符串,出现 这种情况,后面的字符就不能算到里面去了,程序就报错了. ...
- Halt- Linux必学的60个命令
1.作用 halt命令的作用是关闭系统,它的使用权限是超级用户. 2.格式 halt [-n] [-w] [-d] [-f] [-i] [-p] 3.主要参数说明 -n:防止sync系统调用,它用在用 ...
- springboot与热部署
在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四种情况,如何能实现热部署. 1.模板引擎: 在Sprin ...
- 通过Amazon AWS 十分钟搭建私人主机 自由的不要不要的
首先承认有点标题党了,当时自己搞的时候可不止十分钟,好吧,我承认是坑太多了,所以特意开了一篇博文,就是要准备尝试的和我一样的菜鸟们,可以真正的十分钟搞定. 当然高手可能用不上十分钟. 首先,就是 ...
- Window和Mac下端口占用情况及处理方式
1. 在Mac下端口占用的情况: 找到占用的进程并杀掉: 1.查看端口占用进程 sudo lsof -i :8880 可以看到进程的PID 2.杀掉进程 sudo kill -9 4580(4580为 ...
- 89 k数和
原题网址:https://www.lintcode.com/problem/k-sum/description 描述 给定n个不同的正整数,整数k(k < = n)以及一个目标数字. 在这n个数 ...
- Android基础控件Button的使用
1.相关属性 Android的按钮有Button和ImageButton(图像按钮),Button extends TextView, ImageButton extends ImageView! a ...