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<K> 获取所有键的集合(键是唯一的,所以是Set集合)
- entrySet():Set<Entry<K,V>>获取所有键值对的集合
- Entry:
- getKey():K 获取 Entry 中的键
- getValue():V 获取 Entry 中的值
- values():Collection<V> 获取所有值的集合(Map存储,值是无序的,但是可重复,所以是Collection集合)
- clear():void 清空集合中的键值对
- isEmpty():boolean 判断集合中是否有键值对
Map 集合的遍历
1.获取所有的键,遍历键根据键获取值
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key + "=" + value);
}
2.获取所有的键值对,遍历键值对,从中获取键和值
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);
}
3.forEach方法(1.8)
map.forEach((key, value) -> {
System.out.println(key + "=" + value);
});
// list也可以这么用
list.forEach(name -> {
System.out.println(name);
});
// 在简化一点(只用于输出)
list.forEach(System.out::println);
Collections工具类
Arrays。
Collection和Collections的区别?(面试题)
- Collection 是一个集合的顶级接口,用于存储可重复的,无序的数据。
- Collections 是一个集合的工具类,里面定义了大量的静态方法,用于更为边界的操作集合
常用方法:
-
sort(List<T> list) : void 可以实现对集合的升序排序
-
min(Collection<? extends T> coll) : T 获取集合中的最小值
-
max(Collection<? extends T> coll) : T 获取集合中的最大值
-
reverse(List<?> list) : void 反转集合元素
-
shuffle(List<?> list) : void 打乱集合元素
-
indexOfSubList(): int 查看这一段东西在集合的位置
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的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:
方法优先于对象
自动识别优于用户定义
便捷性与灵活性并存
适配与兼容
可选依赖原则
无侵入原则
安装(导入jar包)
-
下载 jar 包
hutool-all
-
在项目中新建一个目录:lib
-
拷贝 jar 包到 lib 目录
-
右键 jar 包 -> Build Path -> add to build path
-
在项目中会出现一个 Referenced Libraries 关联库
使用
集合工具类:
- CollectionUtil
- newArrayList(T... values):ArrayList<T> 快速创建一个指定容量的集合
- join(Iterable<T> iterable,CharSequence conjunction):String 将集合中的元素通过指定字符拼接为字符串
- union(Collection<T>coll1,Collection<T>coll2):Collection<T>取两个集合的并集组成一个新的集合
- 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、""空字符串)
- isNotBlank :boolean 判断字符串是否是空的字符(游戏里的空字符)