Map集合

Map集合

为什么需要map集合?

学生id			姓名				年龄			成绩
20190216		张三				18				80.0
20190217		李四				20				85.0
20190218		李四				21				89.0
20190219		王五				21				89.0

如果使用已经学习过的知识点,如何来存储如上的数据?
HashSet idList
ArrayList nameList
ArrayList ageList
ArrayList scoreList

需求:请通过学好查询某个学生的学生信息(姓名 年龄 成绩)?

提高学号2019021718,查询它的成绩?
1.遍历idList,判断2019021718是否存在?
		存在
				不能实现
		不存在	该学生不存在
2.HashSet<Student> stuList
	遍历set集合,获取学生的id,判断2019021718是否存在
		存在
			通过学生对象获取学生成绩
		不存在 该学生不存在

对新技术的要求:
1.能够存在关系的集合
2.左边一列 唯一
3.右边可以根据左边来查找

Map集合
将键映射到值的对象。map集合不能包含重复的键;每个键只能映射到一个值。
特点:
1.键必须唯一,无序的 类似于Set
2.值可重复,值的顺序取决于键的顺序,类似于Collection List
3.键和值存在一一对应的映射关系
4.map集合的数据结构完全取决于键的数据结构,和值无关
5.键和值都是可以存储null元素的

常用方法:

增加
		V put(K key, V value)  将key|value存入Map,如果已包含key则替换
		void putAll(Map<? extends K,? extends V> m)
删除
		void clear()  全部清除
		V remove(Object key)  移除一个键
修改
		V get(K key, V value)
遍历
		V get(Object key)
		Set<K> keySet()
		Set<Map.Entry<K,V>> entrySet()
判断
		boolean containKey(Object Key)  查看是否包含某个key值
		boolean containsValue(Object Value)  查看是否包含某个value值
		boolean isEmpty()  查看集合是否为空
获取
		V get(Object key)  通过键获取值
		int size()  查看长度
		Set<K>  keySey()  获取所有键的集合
		Collection<V> values()	获取所有值的集合

		

map的遍历方式:

map的遍历方式一:
根据Key查找Value  Set<Key>set = map.keySet()
1.获取键的集合
2.遍历键的集合获取到每一个键
3.通过键获取到值
4.输出键值对即可

Set<String> mans = map.KeySet();
for (String man : mans) {
	String woman = map.get(man);
	System.out.println(man + "=" + woman);
}

map的遍历方式二:
 Set<Map.Entry<K,V>> entrySet()
根据键值对对象找键和值   Set<Map.Entry<Key,Value>> set = map.entrySet()
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值

Set<Entry<String, String>> keyValues = map.entrySet();
for(Entry<String, Sting> keyValue : keyValues) {
	String man = keyValue.getKey();
	String woman = keyValue.getValue();
	System.out.println(man +  "=" + woman);
}

HashMap类

基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了非同步和允许使用null之外,HashMap类与Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
特点:
1.键无序,唯一,类似于Set集合
2.值有序,可重复,类似于List,可以理解为Collection
3.底层数据结构是哈希表,保证键唯一
4.允许键为null,值为null

TreeMap类

基于红黑树(Red-Black tree)的NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据创建映射是提供的Comparator进行排序,具体取决于使用的构造方法。
特点:
1.键可排序,唯一
2.值有序,可重复,类似于List
3.底层数据结构是自平衡的二叉树,可排序
4.排序方式类似于TreeSet,分为自然器排序和比较器排序,具体取决于使用的构造方法

LinkedHashMap

Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序
特点:
1.键有序,唯一
2.值有序,可重复,类似于List
3.底层数据结构是哈希表和链表,哈希表保证键唯一,链表保证键有序

WeakHashMap类

以弱键 实现的基于哈希表的Map。在WeakHashMap中,当某个键不再正常使用时,将自动移除其条目。更精确的说,对于一个给定的键,其映射的存在不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。
丢弃某个键时,其条目从映射中有效的移除,因此,该类的行为与其他的Map实现有所不同。

HashMap类

此类实现一个哈希表,该哈希表将映射到相应的值。任何非null 对象都可以作键或值
特点:
1.不允许null键和null值
2.线程安全,效率低

面试题:
HashMap和Hashtable的区别:
HashMap是不安全的不同步的效率高的 允许null键与null值
Hashtable是安全的同步的效率低的 不允许null键与null值
底层都是哈希表结构

Collections工具类

类似于数组操作的Arrays工具类,该类是针对集合操作的工具类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值