17.MAP
双列集合的顶级接口
遍历方式 :
先 key 再 value 或者用 entrySet()
去重:
如果key为自定义类型,去重复的话,重写hashCode和equals方法,去重复过程和set一样一样的
因为set集合的元素到了底层都是保存到了map的key位置上
**键值对:**唯一 快速查找 无序存储
HashMap | 最常用,线程不安全,查询速度快(适合单线程场景)。 |
---|---|
TreeMap | 键会自动排序(按自然顺序或自定义规则),适合需要排序的场景。 |
LinkedHashMap | 保持插入顺序,遍历顺序和插入顺序一致。 |
ConcurrentHashMap | 线程安全,适合多线程环境(如高并发的服务器程序)。 |
18.斗地主案列 map升级
//1.创建数组-> color -> 专门存花色
String[] color = "♠-♥-♣-♦".split("-");
//2.创建数组 -> number -> 专门存牌号
String[] number = "2-3-4-5-6-7-8-9-10-J-Q-K-A".split("-");
//3.创建map集合,key为序号,value为组合好的牌面
HashMap<Integer, String> poker = new HashMap<>();
//4.创建一个ArrayList,专门存储key
ArrayList<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
//5.组合牌,存储到map中
int key = 2;
for (String num : number) {
for (String huaSe : color) {
String pokerNumber = huaSe+num;
poker.put(key,pokerNumber);
list.add(key);
key++;
}
}
<- 12.
19.hash表结构存储过程
哈希桶数组 + 链表指针
20.TreeMap
1.概述:TreeMap是Map的实现类
2.特点:
a.对key进行排序
b.无索引
c.key唯一
d.线程不安全
e.不能存null
3.数据结构:红黑树
<- 6 红黑树
21.HashTable
HashMap和Hashtable区别:
相同点:元素无序,无索引,key唯一
不同点:HashMap线程不安全,Hashtable线程安全
HashMap可以存储null键null值;Hashtable不能
22.vector
动态数组 :动态扩容 2倍 ,线程安全 ,随机访问高效
。。。
已逐渐被 ArrayList
和 CopyOnWriteArrayList
替代。
23.集合嵌套
list嵌套list
list嵌套map
map 嵌套 map
小结 -3
模块20回顾:
1.HashMap
a.特点:无序,无索引,key唯一,线程不安全,可以存null键null值
b.数据结构:哈希表
c.方法:put remove get keySet entrySet values containsKey
2.LinkedHashMap:
a.特点:有序,无索引,key唯一,线程不安全,可以存null键null值
b.数据结构:哈希表+双向链表
3.key如何去重复:重写hashCode和equals方法
4.TreeSet:是set接口实现类
a.特点:对元素排序,无索引,元素唯一,线程不安全,不可以存null键null值
b.构造:
TreeSet()
TreeSet(Comparator c)
5.TreeMap:
a.特点:对 key排序,无索引,key唯一,线程不安全,不可以存null键null值
b.构造:
TreeMap()
TreeMap(Comparator c)
6.Hashtable:是map接口的实现类
a.特点:无序,无索引,key唯一,线程安全,不能存null键null值
b.用法:和HashMap一样
c.数据结构:哈希表
7.Vector:
a.特点:有序,有索引,元素可重复,线程安全
b.数据结构:数组
8.Properties:是Hashtable子类
a.特点:无序,无索引,key唯一,线程安全,不能存null键null值,key和value都是String的
b.特有方法:
setProperty
getProperty
stringPropertyNames
load(IO流对象) -> 将流中数据加载到集合中
模块21重点:
1.分清楚IO流流向
2.会字节流和字符流的读写操作