Java中的Map集合以及Map集合遍历实例

一、Map集合

Map<K,V>k是键,v是值
1、 将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射的一个值
2、 实现类
 a) HashMap
 b) TreeMap
3、 Map集合和Collection集合的区别
 a) Collection集合存储元素是单独出现的,
  Collection集合的子接口Set存储元素是唯一的,List是可以重复的;
  Collection集合的数据结构是针对元素有效
 b) Map集合存储元素是成对出现的按照键值,
  键是唯一的,值是可以重复的,
  Map集合的数据结构值针对键有效,与值无关
4、 Map集合的功能概述:
 a) 添加功能
  i. V put(K key,V value);添加元素,
   1. 如果之前无此键则添加此键值则,并返回null,
   2. 如果有此键则将该值替换之前的值,并返回之前的值
 b) 删除功能
  i. void clear();移除所有的键值对元素
  ii. V remove (Object key);根据键删除键值对元素,并将值返回
 c) 判断功能
  i. boolean containsKey(object key);判断集合是否包含指定的键
  ii. boolean containsValue(Object value);判断集合是否包含指定的值
  iii. boolean isEmpty();判断集合是否为空
 d) 获取功能
  i. Set<Map.Entry<K,V>> entrySet();返回的是键值对对象的集合
   返回对象集合后可以通过对象获取键和值,
   获取方法为:对象.getValue()和对象.getKey();
  ii. V get(Object key);根据键获取值
  iii. Set keySet();获取集合中所有键的集合
  iv. Collection values();获取集合中所有值的集合
 e) 长度功能
  i. int size();返回集合中键值对的对数
5、 HashMap<K,V>底层数据结构是哈希表,线程不安全,效率高
 Hashtable<K,V>底层数据结构是哈希表,线程安全,效率低
 a) 基于哈希表的Map接口实现,哈希表的作用是用来保证键的唯一性
 b) 注意当集合存储对象元素时需要重写hashCode()和equals()方法(方法可以自动生成)
6、 LinkedHashMap<K,V>
 a) HashMap的子类,是Map接口的哈希表和链表列表实现,具有可预知的迭代顺序(存储和取出顺序一致)
7、 TreeMap<K,V>基于红黑二叉树的Map接口实现
 a) 自然排序,无参构造方法(元素具备比较性)
  i. 按照compareTo()方法排序,让需要比较的元素对象所属的类实现自然排序接口Comparable,并重写compareTo()方法
 b) 比较器排序,构造方法public TreeSet(Comparator comparator)(集合具备比较性)
  i. 让集合的构造方法接收一个比较器接口的子类对象(compareator)(此处的Comparator为接口,需要写一个接口实现类,在实现类中重写compare()方法,并在这里创建接口实现类的对象,可以用匿名内部类来实现)
8、 Map集合的遍历
 a) 键找值
  i. 获取所有键
  ii. 遍历键的集合,得到每一个键的值
 b) 键值对对象找值和键
  i. 遍历所有的键值对对象的集合
  ii. 根据键值对对象获取键和值

二、Map集合遍历实例
package test14_Traversal;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
 * 遍历:
 * 	1、键找值
 * 	2、键值对象找键和值
 */
public class HashMapDemo {
	public static void main(String[] args) {
		HashMap<String,String> hm=new HashMap<String,String>();
		hm.put("1", "Hello");
		hm.put("2", "World");
		hm.put("3", "ZfLiu");
		hm.put("4", "Java");
		
		//键找值遍历
		Set<String> set1=hm.keySet();
		for(String key:set1) {
			String value=hm.get(key);
			System.out.println(key+"--"+value);
		}
		System.out.println("----------------------------");
		
		//键值对象找键和值遍历
		Set<Map.Entry<String, String>> set2=hm.entrySet();
		for(Map.Entry<String, String> me:set2) {
			System.out.println(me.getKey()+"--"+me.getValue());
		}
	}
}

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zfliu96/article/details/83780796