一、Map
1、什么是map
- 底层是:数组+链表 红黑树(链表后面查询慢,防止链表过长而推出)
- 也是一种容器,是父接口,和collection同级
- key键和value值成对出现,是映射关系,存需要key和value一起存,取是根据key取value
2、Map常用子实现类
3、存放
- 将key和value封装成一个Entry对象
- 计算Key的HashCode%数组长度就是存放位置(出现的值相同,这就叫哈希碰撞/哈希冲突)
- 数值冲突后就会在相同位置增加链表进行存储(链表增删块,查询慢,后面的数据就查询慢)
- 链表长度大于8的时候,第九个链表就会转化为红黑树(缺点是占空间)增加效率
- 红黑树小于7的时候红黑树转换回链表
4、 HashMap
4.1、注意
- 线程不安全
- 输出是无序的,
- Key值是不能重复,
- Value可以重复,
- Key和Value都可以为null
- Key的判重条件,必须重写equals和HashCode才行
4.2、重要方法
| 方法 | 描述 |
|---|---|
| Object put(Object key,Object value); | 输入值 |
| Object get(Object key) ; | 取值 |
| remove(key值) | 删除值,如果没有获取到数据,回返回null值,不会报错 |
| getOrDefault | 如果查询到Key值就返回Value值,如果没有查询到,就输出后面的字符串 |
| boolean containsKey(Object key)) | 判断Map集合中是否包含当前的传入的key |
| boolean containsValue(Object value) | 判断Map集合中是否包含当前的传入的value |
4.3、 遍历-调方法
- 使用方法返回到Collection集合,调用for和迭代器进行遍历
| Collection values | 返回一个Map中的所有的value值 Collection集合 |
- 返回所有的key值的集合
| Collection values | 返回一个Map中的所有的value值 Collection集合 |
- 返回所有的entry对象
| 方法 | 描述 |
|---|---|
| Set entrySet() | 返回所有的entry对象(key是唯一的,所以返回的是Set集合) |
5、LinkedHashMap
- 效率很低,同步锁效率低,后面用concurrentHashtable替代
- 是
有序的,其他和HashMap一样(就是有序的HashMap)
6、Hashtable
- 无序的
- 不能存放null(Key和Value都不能为null),不然要 报错
- 是
线程安全的(就是一个线程安全的HashMap,不需要线程安全就使用HashMap代替HashTable)
6、properties(属性)
6.1、介绍
- 是Hashtable子类,表示一个持久的属性集(存在硬 盘不在内存,不断电丢失)
- Proterties当做一个特殊的Map用
- 一般用来做配置和配置文件
6.2、重要方法使用
- 输入值和取值建议不用put和get方法
- 传入值key只能是字符串类型
| 方法 | 描述 |
|---|---|
| Object setProperty(String key, String value) | 设置值 |
| String getProperty(String key) | 取值 |
| String getProperty(String key, String defaultValue) ; | 如果没有通过对应的key没有找到对应的值,就返回后面的defaultValue |
-
将内存中的数据写入到用硬盘
-
将硬盘里的数据读取到内存里
instanceof
7、TreeMap
和Treeset差不多
二、Collections 工具类-Arrays
调用方法就行
1、ex:
三、泛型
1、介绍
就是在设计类(接口等)的时候,没有给规定具体是什么类型的参数,在实例化或调用的时候再传入具体的类型,告诉编译器这是什么类型
-
本质是参数化类型,将类型 当做参数进行传递
-
泛型的类型参数必须是引用类型,不能是基本类型
-
所有的强制转换都是自动和隐式的
-
泛型不能直接实例化,不能直接去new一个泛型
- 借用工具类
2、泛型的上下限
- 写类的时候采用逐一继承
- ex:B继承A,C继承B
| 符号 | 描述 |
|---|---|
| ? | 标识通配符,可以表示任何类型 |
- 表示上限
? extends Number: 表示通配符 ?的[上限],必须是Number及Number的子类
- 表示下限
? super Number: 表示通配符 ?的[下限],必须是Number及Number的父类