博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5月18日集合架构 Map
阅读量:5088 次
发布时间:2019-06-13

本文共 2337 字,大约阅读时间需要 7 分钟。

说明:

首先看到这个图,我在昨天已经开始学习集合中的Collection,今天开始学习Map集合

一.List集合

 

Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。

 

List集合有两个子类,但是我们常用的是HashMap

它的主要方法:

    put();                         放入键和值

    remove();                  移除

    get();                         获取

    containskey();          判断

    Set();    keySet();         获取Map集合中所有的键

 

1.HashMap

 

      以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。

 

下面给大家看个我们以后写代码会用到的例子for循环(三种介绍)

 

package cn.kgc.Demo04;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Demo05EntrySet {    public static void main(String[] args) {        HashMap
mm = new HashMap<>(); mm.put("豪豪",25); mm.put("福福",23); mm.put("龙龙",27); mm.put("波波",21); mm.put("凡凡",18); System.out.println(mm); System.out.println("************************"); //通过mm.entrySet()获取set集合 Set
> set = mm.entrySet(); //通过set集合去使用迭代器 Iterator
> iet = set.iterator(); while(iet.hasNext()){ System.out.println(iet.next()); } System.out.println("****************"); Iterator
> it = set.iterator(); while(it.hasNext()){ Map.Entry
en = it.next();//en是一个对象 Object key = en.getKey(); Object value = en.getValue(); System.out.println(key+":"+value); } //增强型for System.out.println("************************"); for(Map.Entry
set1:mm.entrySet()){ String key = set1.getKey(); Integer value = set1.getValue(); System.out.println(key+":"+value); } }}

2.LinkedHashMap

     LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。

     LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

     LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序
     根据链表中元素的顺序可以分为:按插入顺序的链表,和按访问顺序(调用get方法)的链表。默认是按插入顺序排序,如果指定按访问顺序排序,那么调用get方法后,会将这次访问的元素移至链表尾部,不断访问可以形成按访问顺序排序的链表。

     注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。

     由于LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能,但在迭代访问Map里的全部元素时将有很好的性能,因为它以链表来维护内部顺序。

 

转载于:https://www.cnblogs.com/liurui-bk517/p/10886434.html

你可能感兴趣的文章
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>