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 ...
随机推荐
- ABPvNext-微服务框架基础入门
ABPvNext-微服务框架基础入门 本文使用的是ABPvNext商业版 最新稳定版本7.0.2为演示基础的,后续如果更新,会单独写一篇最新版本的,此文为零基础入门教程,后续相关代码会同步更新到git ...
- The first week match's mistake-2
旋转排列 (https://www.luogu.com.cn/problem/B3688) 解读一下题目: 要求从给定的数组拿出最后一个数字后 看看变化后的数组的最后一个数字是否是要求的数字 想到用栈 ...
- [OpenCV-Python] 13 颜色空间转换
文章目录 OpenCV-Python:IV OpenCV中的图像处理 13 颜色空间转换 13.1 转换颜色空间 13.2 物体跟踪 13.3 怎样找到要跟踪对象的 HSV 值? OpenCV-Pyt ...
- 【性能】JDK和Jmeter的安装与配置
一.JDK环境配置 1. 下载JDK 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downl ...
- 基于create-react-app构建静态博客
前言: 用过hexo后,我被其强大的功能惊艳到了,于是便想自己也写一个静态博客生成器,并且可以发布到GitHub托管. 首先我们来看下效果图: 具体是怎么实现的呢? 我们通过create-react- ...
- 新概念英语(New Concept English),前言
本书向读者提供了一套完整的,经过实践检验的英语学习体系,使得学生能够发挥自己的最大潜能. 听力 口语 阅读 写作 学习语言不在于掌握一套规则和积累大量词汇. 而在于如何运用所学的知识. 学习单词,必须 ...
- 第一个mybatis程序,实现增删改查CRUD
mybatis 介绍 mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis,2013年11月迁移到Git ...
- Prism Sample 5 View Injection
这里稍微复杂了点,定义视图A的过程是一样的: <UserControl x:Class="ViewInjection.Views.ViewA" xmlns="htt ...
- Solon 框架,单月下载量超100万了!!!
Solon 框架,于2023年的四月份突冲100万下载量了.感谢开源的力量,我们同喜同荣!!!Solon 目前,是"可信开源共同体"的新成员,积极参与中科院的"开源之夏& ...
- 2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “state“], “values“: [
2022-11-17:组合两个表.请写出sql语句,执行结果是{"headers": ["first_name", "last_name", ...