Map集合_HashMap_TreeMap_等_小记
Map是一种依照键值对数据存储元素的容器。
Map中的元素是两个对象,一个对象作为键,一个对象作为值。一个键(key)和它对应的值构成map集合中的一个元素。Map集合的数据结构只跟键有关,键不可以重复,但是值可以重复。
—|Hashtable:
底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。
效率较低,被HashMap 替代。
—|HashMap:
底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。
要保证键的唯一性,需要覆盖hashCode方法,和equals方法。哈希表的数据结构保证了元素的唯一性,内在是因为重写了equal和HashCode方法。
—| LinkedHashMap:
该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。
—|TreeMap:
底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。return 0,来判断键的唯一性。
Map
常用方法:
V put(K key, V value)添加键值对,第一次用put存储数据,返回null,第二次放置键相同的数据,返回第一次放置的值。
remove(K) 输入键值,移除键对应的值,并返回该值
clear() 清空集合对象
value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返 回的是null。
boolean isEmpty() 判断是否为空,长度为0返回true否则false
boolean containsKey(Object key) 判断集合中是否包含指定的key
boolean containsValue(Object value) 判断集合中是否包含指定的value
Int size()
package Day16_HashMap;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
/**
* @author Aoman_Hao
*/
public class HashMapTest {
public static void main(String[] args) {
HashMap<Integer, String> Ha = new HashMap<Integer,String>();
String s1 = Ha.put(1, "刘诗诗");
String s2 = Ha.put(2, "诗诗");
String s3 = Ha.put(3, "涵");
String s4 = Ha.put(4, "TZRRY");
Ha.put(8, "TZRRY");
String s5 = Ha.put(5, "刘诗5");
Ha.put(5, "刘诗6");
//集中健的集合 keySet
Set<Integer> keySet = Ha.keySet();
for(Integer key:keySet){
System.out.println("编号:"+key+"\t"+"姓名:"+Ha.get(key));
}
System.out.println("--------------------------------");
//返回键值对的集合entrySet
Set<Entry<Integer, String>> entry = Ha.entrySet();
for(Entry<Integer, String> key2:entry ){
System.out.println("号="+key2.getKey()+"\t"+"名="+key2.getValue());
}
System.out.println("--------------------------------");
//判断是否包含键 containsKey
System.out.println("是否包含键2,"+Ha.containsKey(2));
System.out.println("是否包含键10,"+Ha.containsKey(10));
//判断是否包含值 containsValue
System.out.println("是否包含值‘刘诗诗’,"+Ha.containsValue("刘诗诗"));
System.out.println("是否包含值‘Aoman’,"+Ha.containsValue("Aoman"));
System.out.println("-----------------------");
//暴力清空
Ha.clear();
System.out.println(Ha);
}
}
输出:
编号:1 姓名:刘诗诗
编号:2 姓名:诗诗
编号:3 姓名:涵
编号:4 姓名:TZRRY
编号:5 姓名:刘诗6
编号:8 姓名:TZRRY
--------------------------------
号=1 名=刘诗诗
号=2 名=诗诗
号=3 名=涵
号=4 名=TZRRY
号=5 名=刘诗6
号=8 名=TZRRY
--------------------------------
是否包含键2,true
是否包含键10,false
是否包含值‘刘诗诗’,true
是否包含值‘Aoman’,false
-----------------------
{}
总:键相同,值覆盖,map集合的数据结构只跟键有关,如要存储不一样的数据,必须保证键值是不一样的,否则会导致存储数据跟预想的不一样,会丢失数据。map集合重写了tostring语句,所以可以有默认格式的输出,hash表的结构的特点是输出无序的,即存数据跟取数据的顺序是不一致的。
测试类
package Day16_HashMap;
import java.util.HashMap;
import java.util.Set;
/**
* @author Aoman_Hao
*/
public class HashMapTest2 {
public static void main(String[] args) {
//创建
HashMap<Star, Integer> StHa = new HashMap<Star,Integer>();
StHa.put(new Star("刘诗诗", 23, "女"), 01);
StHa.put(new Star("TZRRY", 24, "男"), 02);
StHa.put(new Star("涵", 25, "女"), 03);
StHa.put(new Star("刘六", 28, "男"), 04);
//打印成字符串
//键集合,转为数组类型,
Object[] array = StHa.keySet().toArray();
StringBuffer Sb = new StringBuffer();
for(Object key: array){
//强转star类型
Star s_Key=(Star)key;
//append拼接
Sb.append("个人信息:").append("姓名:").append(s_Key.getName()).append("\t")
.append("年龄:").append(s_Key.getAge()).append("\t")
.append("性别").append(s_Key.getGender()).append("\t")
.append("编号:").append(StHa.get(key)).append("\r\n");
}
System.out.println(Sb);
}
}
输出:
个人信息:姓名:TZRRY 年龄:24 性别男 编号:2
个人信息:姓名:刘六 年龄:28 性别男 编号:4
个人信息:姓名:涵 年龄:25 性别女 编号:3
个人信息:姓名:刘诗诗 年龄:23 性别女 编号:1
注:star是简单的姓名年龄性别的类。
LinkedHashMap的特点是元素有序,元素唯一。
有序性即存取数据的顺序是一致的,是靠链表完成的。
唯一性是靠哈希表完成的。
package Day16_HashMap;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Set;
/**
* @author Aoman_Hao
*/
public class HashMapTest2 {
public static void main(String[] args) {
//创建
HashMap<Star, Integer> StHa = new LinkedHashMap<Star,Integer>();
StHa.put(new Star("刘诗诗", 23, "女"), 01);
StHa.put(new Star("TZRRY", 24, "男"), 02);
StHa.put(new Star("涵", 25, "女"), 03);
StHa.put(new Star("刘六", 28, "男"), 04);
//打印成字符串
//键集合,转为数组类型,
Object[] array = StHa.keySet().toArray();
StringBuffer Sb = new StringBuffer();
if(StHa!=null){
for(Object key: array){
//强转star类型
Star s_Key=(Star)key;
//append拼接
Sb.append("个人信息:").append("姓名:").append(s_Key.getName()).append("\t")
.append("年龄:").append(s_Key.getAge()).append("\t")
.append("性别").append(s_Key.getGender()).append("\t")
.append("编号:").append(StHa.get(key)).append("\r\n");
}
System.out.println(Sb);
}
}
}
输出:
个人信息:姓名:刘诗诗 年龄:23 性别女 编号:1
个人信息:姓名:TZRRY 年龄:24 性别男 编号:2
个人信息:姓名:涵 年龄:25 性别女 编号:3
个人信息:姓名:刘六 年龄:28 性别男 编号:4
注:增强for循环前定要对集合进行非空判断,否则会出现空指针异常。
HashMap嵌套串用,可与ArrayList搭配使用
package Day16_HashMap;
import java.util.HashMap;
import java.util.Set;
/**
*
*
* 集合嵌套之HashMap嵌套HashMap
偶像派(没演技)
杨幂 30 女
杨颖 30 女
实力派
刘诗诗 27 女
胡歌 30 男
* @author Aoman_Hao
*/
public class HashMapQT {
public static void main(String[] args) {
//创建小集合
HashMap<Star, String> Idol = new HashMap<Star,String>();
HashMap<Star, String> Actor = new HashMap<Star,String>();
//创建大集合
HashMap<String, HashMap<Star, String>> Hash = new HashMap<String,HashMap<Star, String>>();
//添加元素
Idol.put(new Star("杨幂", 30, "女"), "i1");
Idol.put(new Star("杨颖", 30, "女"), "i2");
Actor.put(new Star("刘诗诗", 27, "女"), "a1");
Actor.put(new Star("胡歌", 30, "男"), "a1");
Hash.put("偶像", Idol);
Hash.put("实力派", Actor);
Set<String> Hash_keyset = Hash.keySet();
//遍历大集合
for(String fen:Hash_keyset){
//得到大集合中元素,求的其键
HashMap<Star, String> Hash_son = Hash.get(fen);
Set<Star> Hash_son_keySet = Hash_son.keySet();
//格式打印
System.out.println("分类:"+fen);
System.out.println("\t"+"姓名:"+"\t"+"年龄:"+"\t"+"性别:"+"\t"+"编号:");
//建立缓冲区,append拼接
StringBuffer Sb = new StringBuffer();
//遍历小集合
for(Star key:Hash_son_keySet){
Sb.append("\t").append(key.getName()).append("\t")
.append(key.getAge()).append("\t")
.append(key.getGender()).append("\t")
.append(Hash_son.get(key)).append("\r\n");
}
System.out.println(Sb);
}
}
}
输出:
分类:实力派
姓名: 年龄: 性别: 编号:
胡歌 30 男 a1
刘诗诗 27 女 a1
分类:偶像
姓名: 年龄: 性别: 编号:
杨幂 30 女 i1
杨颖 30 女 i2
Collections常用法
public static void sort(List list): 排序,默认按照自然顺序
public static int binarySearch(List<> list,T key): 二分查找
public static T max(Collection<> coll): 获取最大值
public static void reverse(List<> list): 反转
public static void shuffle(List<> list): 随机置换
Map集合_HashMap_TreeMap_等_小记的更多相关文章
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_10_练习_计算一个字符串中每个字符出现的次数
- EL_获取域中存储的值_ List 集合&Map集合值和EL _ empty 运算符&隐式对象 pageContext
3.获取对線. List 集合. Map 集合的值 1.对線:${域名称,键名.属性名}本质上会去调用对線的 getter 方法 2. List 集合:${域名称.键名[索引]} List list ...
- ES6中的Set和Map集合
前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集 ...
- 详解Map集合体系及方法entrySet、keySet、values
简单回顾Map集合: Map表示映射关系,以键值对的方式来保存数据.key和value一一对应.key是唯一的,不可重复,而value是可重复的,可以被多个key关联.虽然Map是放入两个数据,但是却 ...
- ES6中的Map集合(与java里类似)
Set类型可以用来处理列表中的值,但是不适用于处理键值对这样的信息结构.ES6也添加了Map集合来解决类似的问题 一.Map集合 JS的对象(Object),本质上是键值对的集合(Hash结构),但是 ...
- Java基础(二十三)集合(6)Map集合
Map接口作为Java集合框架中的第二类接口,其子接口为SortedMap接口,SortedMap接口的子接口为NavigableMap接口. 实现了Map接口具体类有:HashMap(子类Linke ...
- 第1节 Scala基础语法:13、list集合的定义和操作;16、set集合;17、map集合
list.+:5 , list.::5: 在list集合头部添加单个元素5 : li1.:+(5):在list集合尾部添加单个元素5: li1++li2,li1:::li2:在li1集合尾部添加il2 ...
- HashTable集合和练习题_计算一个字符串中每一个字符出现的次数
HashTable集合 /** * java.util.Hashtable<K,V>集合 implement Map<K,V>接口 * Hashtable:底层也是一个哈希表, ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
随机推荐
- 新一代自动化测试神器Playwright
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/4bedb73c.html 你好,我是测试蔡坨坨. 说到WebUI自动化测试,首当其冲的当属Selenium,在很长的一段时间 ...
- ChatCLM部署随笔
ChatCLM 博客 ChatGLM Github ChatGLM-webui 介绍 ChatGLM-6B 是一个开源的.支持中英双语的对话语言模型,基于 General Language Model ...
- 对dubbo的DubboReference.check的参数进行剖析
背景 在使用dubbo的时候,发现当消费者启动的时候,如果提供者没有启动,即使提供者后来启动了,消费者也调不通提供者提供的接口了. 注册中心使用都是nacos dubbo版本是3.0.4 例子 接口 ...
- Nginx的负载均衡策略
Nginx的负载均衡策略 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top 共六种: 轮询.权重.ip ...
- vue中父组件给子组件传值的方法
顺序............................................. -------------列表组件,注册组件.调用使用组件----------------- 1,子组件 ...
- 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置
目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 沁恒 CH32V208 ...
- IDP中的黄金路径究竟是什么?
在云原生时代,开发人员面临着越来越多的工具.技术.思维方式的选择,给他们带来了极大的认知负担和工作量.为了提高开发人员的开发效率与开发体验,一些头部科技公司开始建立自己的内部开发者平台(IDP).在之 ...
- pandas 常用操作记录
apply函数 一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作. 函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数. 作用: 用 ...
- 【GiraKoo】重置Android Studio环境的几个方案
[GiraKoo]重置Android Studio环境的几个方案 Android Studio经常在编译时,发现一些奇奇怪怪的编译/运行问题. 明明是很小的改动,但是出现了一些不相关的错误.搞不清楚究 ...
- Python对两个Excel操作
简介 现在有个需求,我们根据需要 data.xlsx 中某些单元格的内容来查找 find.xlsx 中的某些內容. 数据内容(为了数据安全,所有数据均已模糊处理) data.xlsx内容: find. ...