Map集合和泛型
Map
什么是Map?
接口Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
HashMap
健值对:一个健对应一个值
无序排列:添加顺序和输出顺序不一致
特点:
健值对形式存在 任意类型
允许Key和Value都为null
健不能重复 如果健重复,里面的值会被新值覆盖掉
线程不安全,效率高
遍历方式:注意!HashMap自身是无法用for和foreach遍历的
1.调用Keyset方法,得到set集合,再进行遍历
2.调用entryset方法,得到键值对的集合
面试题:底层原理
jdk1.7:
HashMap的底层基于数组+链表实现,用键值对的形式存储数据
根据key的hashcode元素得到一个int值,确定该键值对放在数组的哪个位置
key值hash运算后得到的索引位置相同的时候,称为hash碰撞,会以链表的形式放在后面
链表长度过长,导致取值的时候效率太低
jdk1.8:
HashMap的底层基于数组+链表+红黑树(一种倾向于自平衡的二叉树)
Demo
1 | package com.ifueen.classwork.hashmap; |
HashTable
特点:
健和值都不能为null
线程安全 put方法是同步方法
健值不能重复 重复会导致原来的值被覆盖掉
Demo
1 | package com.ifueen.classwork.hashtable; |
ConcurrentHashMap
特点:
线程安全 在put方法里面同步了核心代码块
key和value值都不能为null
1 | package com.ifueen.classwork.concurrenthashmaptest; |
面试题:区别
相同点:
都是Map接口的实现类
都是键值对来进行存储,任意类型任意多个数据
不同点:
HashMap线程不安全,可以用null作为key或value 效率较高
HashTable同步方法,线程安全,不能用null作为key或value 效率较低
ConcurrentHashMap同步代码块,线程安全,不能用null作为key或value 效率较HashTable高一些
Collections工具类
专门用来对集合进行操作的工具类,方法很多,可以实现不同的功能,详情请见API文档
Properties读写文件
是Hashtable的子类,在用自己的存入方法时只能够传入String类型的数据
key和value里面的值都不能为null
持久化:
内存到磁盘
磁盘到内存
路径:
相对路径:项目的根路径
绝对路径:指定位置
泛型
泛指的一种类型
用来约束容器只能存放某种类型的数据
泛型的上限和下限
上限:约束传入的类型最高为什么类型
语法:? extends 类型
下限:约束传入的类型最低为什么类型
语法:? super 类型
Demo
1 | package com.ifueen.classwork.generic; |
MyObject类
1 | package com.ifueen.classwork.generic; |
MyObject2类
1 | package com.ifueen.classwork.generic; |