Map

1.map概述

map.put(key,value)里面存放的是两个相关的数据,key=value键值对

Map集合中存放的是键值对(put(key,value)),用get(key)获取集合中的元素

从get方法此时的参数还是Object类型的,get方法没有实用泛型

Map集合的操作

*添加

put(key,value) //把一个键值对存放到map集合中

*删除

remove(Object key) //删除key为指定对象的键值对

* void clear() //清空map集合中的所有元素

*判断

boolean containKey(Object key)  //判断是否包含key为指定对象的键值对

boolean containValue(Object value) //判断是否包含value为指定对象的元素

boolean isEmpty() //判断Map集合是否包含元素

* 获取

get(Object key ) //获得指定key对应的value

Set<K> keySet() //获得所有key组成的Set集合

Collection <V> values() //获得所有value组成的Set集合

Set<Map.Entry<K,V>> entrySet() //获得所有键值对对象组成的Set集合

int size() //获得map集合的大小(存了多少元素)

2.HashMap

数据结构:内部是哈希表,一次存储的是一对键值对,元素为Map.Entry类的对象,Entry里封装了一个键值对

特点:把key和value封装到Entry对象中

从Map的设计来看,是通过key找到value值的,所以在map中,key的值不能重复,但value可以重复

因为内部结构为哈希表,所以添加删除查询操作很快

由内部结构决定了HashMao不能直接遍历,需要使用Set集合的遍历方法遍历,就有了keySet(),values(),entrySet()三个方法,其中keySet(),values() 依赖entrySet()

3.遍历map的三种方式

get(Object key ) //获得指定key对应的value

Set<K> keySet() //获得所有key组成的Set集合

Collection <V> values() //获得所有value组成的Set集合

Set<Map.Entry<K,V>> entrySet() //获得所有键值对对象组成的Set集合

4.HashMap练习

1.自定义MyHashMap,可以存储三个对象,提供put(key,v1,v2),get(key),remove(key)

2.统计一票文章中每一个字符出现的次数,并打印到控制台(忽略空格符,换行符,回车符,制表符等空白符)

3.把一个字符串中的简体中文转换为繁体中文

5. TreeMap

内部结构:二叉树,元素是Map.Entry类的对象-包装了key和Value

特点:元素添加到map中时就已经按key排了顺序

添加,删除,获取操作都很快

由于按key进行排序,所以要求key具有排序性(自身实现comparable接口,或者实现比较器comparator接口)

6.TreeMap练习

1. 统记一篇文章中字符出现的次数,并且用字典顺序排序

2. 统记一篇文章中字符出现的次数,并且降序排序

7. Properties类的用法

HashTable 是jdk老版本的遗留类,内部也是哈希表,因为是线程安全的,所以各种操作都相对比较慢,已经被HashMap替代

HashTable还有一个子类Properties,具有集合的特点,又可以进行文件的读取写入操作,使用频率高

load(Reader reader) 字符流

专门用来properties文件

getProperties()

setProperties()

8. Collections 工具类

专门针对接口的一个工具类Collections

方法;sort 对List集合进行排序

binarySearch 方法,使用二分查找法查找元素,要求必须是List集合,而且必须已经排好序,返回查找元素的索引位置

fill 方法 使用指定元素填充List集合

replaceAll 方法 使用指定元素替换所有的另一个元素,只对List有效

max 方法 返回一个集合中最大的元素

min

shuffle 洗牌 打乱集合元素的顺序

unmodifiableList  返回指定集合的不可修改的包装集合(包装成一个内部类,不可修改)

synchronizedList 返回指定集合的线程安全的包装集合

9. 集合的线程安全问题

当多个线程同时对List对象进行操作时

a 线程添加元素,b线程删除元素

问题:数据错乱

解决办法:1.自己使用同步机制控制2.把普通集合对象转换为线程安全的集合对象

a线程遍历元素,b线程添加或删除元素

问题:同步修改异常

解决办法: 1.自己使用同步机制控制2.把普通集合对象转换为线程安全的集合对象,并且遍历,需要手动同步

collection中是[]

Map中是{}

1.自己使用同步机制控制,需要遍历和添加的线程中都添加同步机制控制

2..把普通集合对象转换为线程安全的集合对象,并且遍历,需要手动同步,这个只需要在遍历的时候添加同步机制控制就行

10.Java集合的工具类Arrays

方法:sort  给数组的元素排序

binarySearch 二分查找法查找元素,返回索引值

copyOf   数组复制

equals 判断两个数组的元素是否相等

fill 填充数组

hashCode 计算数组元素的哈希值

toString 返回每个数组元素组成的字符串

asList  把数组转化为结构不可改变,但可以查询修改的集合

11增强For循环

for(元素类型 类型名:需要遍历的集合对象){

System.out.println(类型名)}

12.结束练习

设计一个数据结构:可以用来存储一个学校中所有年级的所有班级的所有学生的所有课程的成绩

java 深入技术六(Map)的更多相关文章

  1. Java多线程系列六——Map实现类

    参考资料: https://crunchify.com/hashmap-vs-concurrenthashmap-vs-synchronizedmap-how-a-hashmap-can-be-syn ...

  2. 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)

    本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...

  3. 如何才能够系统地学习Java并发技术?

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些 ...

  4. java 深入技术八(内省)

    1. javabean的软件设计思想 2.内省:封装了java反射,提供直接操作属性的Setter和getter方法的方法 3.核心API:BeanInfo java 的描述信息,Introspect ...

  5. Java Web技术总结(目录)

    来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...

  6. Java 集合系列 15 Map总结

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

  8. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  9. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

随机推荐

  1. C#软件设计——小话设计模式原则之:单一职责原则SRP

    前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...

  2. servlet的四个作用域

    作用域规定的是变量的有效期限,servlet有四个作用域对象,这里只说三个: 一. request作用域: 1.作用范围: 就是指从http请求发起,到服务器处理结束,返回响应的整个过程.在这个过程中 ...

  3. ob_start()

    ob_start()函数用于打开缓冲区 1.用于header()之前 ob_start(); //打开缓冲区 echo "Hellon"; //输出 header("lo ...

  4. win10下JDK的安装与环境变量配置

    1.到官网下载最新版本的JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装JDK,同安装其他软件一样 ...

  5. get last dirname/filename in a file path argument

    $ dirname /home/train/00.incipient_data/data_for_gene_prediction_and_RNA-seq/240_rep2.fastq /home/tr ...

  6. 【bzoj4517】 Sdoi2016—排列计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=4517 (题目链接) 题意 求n个数中正好m个数位置不变的排列数. Solution $${错排公式: ...

  7. 菜鸟的Python学习之路(流水账)

    揭开Python的面纱 开始是因为别人说Python简单才开始学的,然后那段时间刚考完研,也没什么事,就多少瞅了瞅,然后发现语法的确简单很多,或者说简洁更合适. 当时看的是简明Python教程,没用多 ...

  8. nginx中的超时设置

    nginx使用proxy模块时,默认的读取超时时间是60s. 1. send_timeout syntax: send_timeout the time default: send_timeout 6 ...

  9. bzoj 1004 Cards

    1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有 多少种染色方案,Sun ...

  10. Day2-python基础2

    本次学习内容 1.for循环 2.continue and break 3.while循环 4.运算符 5.数据类型 数字 字符串 列表 1.for循环 猜年龄的游戏完善下,只有三次机会 for i ...