Java开发知识之Java中的Map结构

一丶Map接口

  Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value的值. 相当于就是 一一对应关系. 比如你有老婆,你是老公, 一个老公只能有一个老婆(在中国^_^),Kery还决定了存储对象在映射中的存储位置.但不是由Key对象本身决定的.而是一种散列技术进行处理.产生一个散列码的证书值.简单来说就是通过一串算法.算出的一个不会相同的值.

Map接口,mao不可以存储重复元素.所以我们直接看下方法.

常用方法:

  

Map我们可以看成一张表.所以理解这方方法就很简单了

存放 put 给一个 Key的值. 再给一个Value的值. 可以是泛型存储.

containsKey(object Key)传入一个Key判断这个Key是否在这个表里面.

containsValue 同上.

get(key): 传入一个key值.返回这个key对应的value值. 否则返回NUll

keySet(); 这个有点重要.就是将集合中的key对象.变成一个Set集合存储.可以进行遍历Key值.

Values(): 返回这个集合中所有值对象的 conllection集合.

Map的典型应用.转为 Set进行遍历Key以及对应Values值.

    public static void main(String[] args) throws MyException {

        Map<String,Integer> map = new HashMap<>();
map.put("张三", 1);
map.put("张三", 1);
map.put("李四", 1);
map.put("王五", 1); //key不同,Value值相同.因为key相同的张三.所以不会存储在hash表中.
//遍历Key值
IterKey(map);
//遍历Value值.
IterValue(map); }
private static void IterValue(Map<String,Integer>map) {
System.out.println("遍历Values的值");
Collection<Integer> value = map.values(); //转化为Collection接口类型
java.util.Iterator<Integer> it = value.iterator();
while(it.hasNext()) {
Integer i = (Integer)it.next();
//转换为字符串输出
String str = i.toString();
System.out.print(" " + str);
}
System.out.println(); } private static void IterKey(Map<String, Integer> map) {
System.out.println("遍历Key里面所有的方法");
Set<String> key = map.keySet();
java.util.Iterator<String> it = key.iterator();
while(it.hasNext()) {
String str = (String)it.next();
System.out.print(" " + str); }
System.out.println();
}

我们要用子类去实例化.也就是HashMap()

上面分别遍历了Map表中的Key以及Value的值. 需要进行转换. Key转换为Set集合. Value转换为Collection接口就可以了.

二丶Map接口以及子类.

  Map接口有自己的两个子类.

分别是

1.HashMap类.

2.TreeMap类.

各自不同的特点

  HashMap类:

HashMap类是基于哈希表的Map接口的实现.此实现提供所有的可选的映射操作.并且匀速使用null值跟建. 但必须保证key值得唯一性才可以. HashMap通过哈希表对其内部的映射关系进行快速查找.此类不保证映射的顺序.特别是他不会保证顺序是恒久不变的.

  TreeMap:

TreeMap类不仅实现了Map接口. 还是先了java.util.SortdMap接口,因此集合中的映射关系有一定得顺序.但是在添加跟删除定位映射关系的时候.TreeMap比HashMap类性能稍差.因为有顺序排列的.所有key值不能为Null

代码其不同

public static void main(String[] args) throws MyException {

        Map<String,Integer> map = new HashMap<>();
map.put("张三", 1);
map.put("张三", 2);
map.put("李四", 4);
map.put("王五", 5); //key不同,Value值相同.因为key相同的张三.所以不会存储在hash表中.
//遍历Key值
IterKey(map);
//遍历Value值.
IterValue(map); Map<String,Integer> treeMaps = new TreeMap<>();
treeMaps.putAll(map);
//遍历treeMap以及值.跟上面一样.
IterKey(treeMaps);
IterValue(treeMaps); }

输出结果

一个是有序,一个是无序的.

三丶总结

  1.map 使用的是映射关系 key value 添加时put方法. 删除是 remove,

  2.map的遍历如果遍历key 要使用KeySet方法转为Set集合.进行遍历. 如果是value 在使用Collection接口 使用方法values返回. 进行遍历

  3.hashMap不保证顺序, key可以为null但是不能重复. TreeMap可以保证顺序,但是key不能为Null

  4.注意map转为Set以及Colliection转换.以及迭代.

Java开发知识之Java中的Map结构的更多相关文章

  1. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  2. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  3. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  4. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  5. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...

  6. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  9. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

随机推荐

  1. linux视频录制,推流处理

    1.linux视频合成(视频后缀要一致) ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -lavfi hstack=inputs=3 4.mp4 (input=3表示希望合并的视 ...

  2. Java的四种引用——强引用、软引用、弱引用、虚引用

    目录 强引用 软引用 弱引用 虚引用 强引用 拥有强引用的对象永远不会被GC,可以根据引用的get方法获取到被引用对象 软引用 在内存充足的额时候,拥有软引用的对象不会被GC:即将内存溢出的时候,会对 ...

  3. window 安装redis、memcache的php扩展和 reidis 、memcache 及 reids管理软件

    redis 1.安装redis的php扩展 http://windows.php.net/downloads/pecl/releases/redis/ http://windows.php.net/d ...

  4. golang二进制bit位的常用操作

    golang作为一热门的兼顾性能 效率的热门语言,相信很多人都知道,在编程语言排行榜上一直都是很亮眼,作为一门强类型语言,二进制位的操作肯定是避免不了的,数据的最小的单位也就是位,尤其是网络中封包.拆 ...

  5. CABaRet: Leveraging Recommendation Systems for Mobile Edge Caching

    CABaRet:利用推荐系统进行移动边缘缓存 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时 ...

  6. Vs 发布编译问题

    如果勾选了预编译 发布后的目录会有PrecompiledApp.config文件,bin目录中会有App_global.asax.dll和App_global.asax.compiled文件 不勾选预 ...

  7. mantisbt的配置与安装

    下载并安装wampserver; 安装时,提示SMTP服务器时,应正确填写邮箱的SMTP的服务器地址: 安装完成后,登录phpMyAdmin; 给原有的root用户创建密码,所有root用户: 创建一 ...

  8. 多媒体文件格式(一):MP4 格式

    在互联网常见的格式中,跨平台最好的应该就属MP4文件了.因为MP4文件既可以在PC平台的Flashplayer中播放,又可以在移动平台的Android.iOS等平台中进行播放,而且使用系统默认的播放器 ...

  9. [Swift]LeetCode85. 最大矩形 | Maximal Rectangle

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and ...

  10. [Swift]LeetCode144. 二叉树的前序遍历 | Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...