java基础之Map集合

发布时间:2024年01月09日

# Map集合

## Map的存储特点

1. 以键值对的形式存放
2. 键(key-K): 无序、无下标、元素不可重复
3. 值(value-V):无序、无下标、元素可以重复

## 常用实现类

1. HashMap
? ?- JDK1.2?? ?底层哈希表实现?? ?线程不安全,效率高
2. LinkedHashMap
? ?- JDK1.2?? ?是HashMap的子类,底层哈希表实现?? ?线程不安全,效率高
3. TreeMap
? ?- JDK1.2?? ?是SortedMap的实现类,底层红黑树实现?? ?线程不安全,效率高
4. Hashtable
? ?- JDK1.0?? ?底层哈希表实现?? ?线程安全,效率低
5. Properties
? ?- JDK1.0?? ?是Hashtable的子类,底层哈希表实现?? ?线程安全,效率低

## 创建

建议使用多态

~~~java
Map<键的泛型,值的泛型> 集合名=new 实现类名<>();
~~~

## 常用方法

1. V ?put(K,V):往集合中添加一个键值对
? ?- 如果键已经存在,则进行值的覆盖
2. int ?size():获取集合元素个数
3. boolean ?containsKey(K):判断是否包含指定键
4. boolean ?containsValue(V):判断是否包含指定值
5. V ?get(K):根据键获取值
6. V ?remove(K): ?根据键删除整个键值对

## 遍历

1. 键遍历:获取所有的键,遍历键,根据键获取值

? ?- Set<K的泛型> keySet():获取所有的键存入Set集合返回

??
?

?Map<String, String> map = new HashMap<>();
? ? ? ? ? ?map.put("username", "zhangsan");
? ? ? ? ? ?map.put("tel", "13333333333");
? ? ? ? ? ?map.put("pwd", "123456");
? ? ? ? ? ?map.put("pwd", "789456");
? ? ? ? ? ?System.out.println("键遍历:");
? ? ? ? ? ?//先获取所有的键
? ? ? ? ? ?Set<String> set1 = map.keySet();
? ? ? ? ? ?//遍历Set
? ? ? ? ? ?Iterator<String> it = set1.iterator();
? ? ? ? ? ?while (it.hasNext()) {
? ? ? ? ? ? ? ?//接收遍历的键
? ? ? ? ? ? ? ?String key = it.next();
? ? ? ? ? ? ? ?System.out.println(key+"-"+map.get(key));
? ? ? ? ? ?}


? ?

2. 值遍历:获取所有的值,遍历值

? ?- Collection<V的泛型> ?values():获取所有的值存入Collection集合返回

?

?~~~java
? ?//获取所有的值
? ? ? ? ? ?Collection<String> coll = map.values();
? ? ? ? ? ?//遍历所有的值
? ? ? ? ? ?for (String s : coll) {
? ? ? ? ? ? ? ?System.out.println(s);
? ? ? ? ? ?}
? ?~~~

3. 键值对遍历: 获取所有的键值对对象, 遍历键值对

? ?- Set<Entry对象> ?entrySet(): ?将集合键值对存入Entry对象,将所有Entry对象放入Set集合返回
? ?- Entry对象的表现形式: ?`Map.Entry<K,V>`
? ?- 获取键: `Entry对象.getKey()`
? ?- 获取值:`Entry对象.getValue()`

?

?~~~java
? ?//获取所有的Entry对象
? ? ? ? ? ?Set<Map.Entry<String, String>> set2 = map.entrySet();
? ? ? ? ? ?//遍历所有entry对象
? ? ? ? ? ?set2.forEach(entry->{
? ? ? ? ? ? ? ?System.out.println(entry.getKey()+"-"+entry.getValue());
? ? ? ? ? ?});
? ?~~~

4. 自遍历forEach:?

? ?- forEach(BiConsumer接口实现类对象)

?

?~~~java
? ?map.forEach(new BiConsumer<String, String>() {
? ? ? ? ? ? ? ?@Override
? ? ? ? ? ? ? ?public void accept(String key, String value) {
? ? ? ? ? ? ? ? ? ?System.out.println(key+"-"+value);
? ? ? ? ? ? ? ?}
? ? ? ? ? ?});
? ? ? ? ? ?System.out.println("自遍历:(lambda)");
? ? ? ? ? ?map.forEach((k,v)-> System.out.println(k+"-"+v));
? ?~~~

## 使用

1. 当哈希表的键为自定义类型时,必须重写类的hashCode和equals才能实现去重
2. HashMap允许null值和null键
? ?- 最多存在一个null键,可以存在多个null值
3. LinkedHashMap在HashMap的基础上可以保证元素存入和取出的顺序一致
4. TreeMap可以根据键对元素进行默认的升序排序
? ?- 如果键为自定义类型,则必须书写排序规则,方式与TreeSet一致
? ?- 无法对null值进行排序(键不可为null)
5. Hashtable不允许null值和null键
6. Properties只能存放String类型
? ?- 不推荐使用多态
? ?- 不可添加泛型
? ?- 推荐优先使用独有内容
? ? ?- String V ?getProperty(String K): ?根据键获取值
? ? ?- setProperty(String k,String v):添加键值对
? ? ?- load(输入流): ?根据流将配置文件内容读取到集合中

## 掌握

1. map的存储特点
2. Map的常用实现类和特点
3. Map的创建语法
4. Map的遍历方式
5. Map的使用

文章来源:https://blog.csdn.net/zhzjn/article/details/135481631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。