14_集合框架2
Map集合概述
Map集合是一种键值对数据的存储方案
key-value,其中key是唯一的,而value是可以重复的
Map是无序存储(Hash)
Map集合使用
- HashMap 使用最多
- HashTable
- Properties
- TreeMap
构造方法:
- HashMap<K,V>()
常用方法:
-
put(K key,V value):V存储更新(相同的健再次调用该方法)键值对数据,返回被替换的值(如果是存储,那么返回的是 null)
-
get(Object key) : V 根据键获取值
-
size() : int 获取集合中存储的键值对数量
-
containsKey(Object key) : boolean 判断集合中是否包含指定的键
-
containsValue(Object value) : boolean 判断集合中是否包含指定的值
-
remove(Object key) : V 根据键删除,返回的是被删除的值
-
keySet() : Set 获取所有键的集合(键是唯一的,所以是Set集合)
-
entrySet() : Set<Entry<K, V>> 获取所有键值对的集合
- Entry:
- getKey() : K 获取 Entry 中的键
- getValue() : V 获取 Entry 中的值
- Entry:
-
values() : Collection 获取所有值的集合(Map存储,值是无序的,但是可重复,所以是Collection集合)
-
clear() : void 清空集合中的键值对
-
…
Map集合的遍历
-
获取所有的键,遍历键根据键获取值
Set<String> keySet = map.keySet(); for (String key : keySet) { String value = map.get(key); System.out.println(key + "=" + value); }
-
获取所有键值对,遍历键值对,从中获取键和值
Set<Entry<String,String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { String key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "=" + value); }
-
forEach方法(1.8之后才有的)
map.forEach((key, value) -> { System.out.println(key + "=" + value); });
Collections工具类
Collection 和 Collections 的区别?(面试题)
- Collection 是一个集合的顶级接口,用于存储可重复的,无序的数据
- Collections 是一个集合的工具类,里面定义了大量的静态方法,用于更为便捷的操作集合
常用方法:
- sort(List list) : void 可以实现对集合的升序排序
- min(Collection<? extends T> coll) : T 获取集合中的最小值
- max(Collection<? extends T> coll) : T 获取集合中的最大值
- reverse(List<?> list) : void 反转集合元素
- shuffle(List<?> list) : void 打乱集合元素
ArrayList的扩容原理
默认仅仅创建集合对象,不存储: 内部的数组会初始化为一个静态常量(空数组)
默认的初始化容量: 10(长度为10的数组)
进行扩容时,每次扩容: 1.5 倍
集合初始化时, 指定集合初始值大小:
如果确定集合要存储的元素个数,那么 ArrayList 在创建对象时,建议指定 initialCapacity 为你要存储的元素个数。
ArrayList<Integer> list = new ArrayList<>(3);
HashMap 使用 HashMap(int initialCapacity) 初始化,如果暂时无法确定集合大小, 那么指定默认值( 16) 即可。
正例: initialCapacity = (需要存储的元素个数 / 负载因子) + 1 。 注意负载因子(即 loader factor) 默认
为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值) 。
HashMap<String, String> map = new HashMap<>(16);
第三方的工具:Hutool
概述
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率。
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:
- 方法优先于对象
- 自动识别优于用户定义
- 便捷性与灵活性并存
- 适配与兼容
- 可选依赖原则
- 无侵入原则
安装(导入jar包)
- 下载 jar 包
hutool-all
- 在项目中新建一个目录:lib
- 拷贝 jar 包到 lib 目录
- 右键 jar 包 -> Build Path -> add to build path
- 在项目中会出现一个 Referenced Libraries 关联库
- 然后按照 Hutool 官方的入门和 API 文档使用即可
使用
集合工具类:
-
CollectionUtil
-
newArrayList(T… values) : ArrayList 快速创建一个指定容量的集合
-
join(Iterable iterable, CharSequence conjunction) : String 将集合中的元素通过指定字符拼接为字符串
-
union(Collection coll1, Collection coll2) : Collection 取两个集合的并集
-
…
-
-
MapUtil
- newHashMap(int size) : HashMap<K, V> 快速创建一个指定容量的Map集合(它会自动帮我们算好初始化容量)
- …
随机数工具类:
- RandomUtil
- randomInt(int min, int max) : int 生成 [min, max) 范围的随机整数
- randomNumbers(int length) : String 生成指定长度的随机字符串(整数)
- …
字符串工具类:
-
StrUtil
-
format(CharSequence template, Object… params) : String
String format2 = StrUtil.format("我的姓名:{},我的年龄:{},我的余额:{}", name, age, money); System.out.println(format2);
-
isNotEmpty(CharSequence str) : boolean 判断字符串是否不为空(null、""空字符串)
-
…
-
…