Java-双例集合-Map-HashMap-TreeMap

1.Map接口

Map接口定义了双例集合的存储特征,它并不是Collection接口的子接口。双例集合的存储特征是以key与value结构为单位进行存储。体现的是数学中的函数y=f(x)概念。

Map与Collection的区别

  • Collection中的容器,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储

  • Map中的容器,元素是成对存在的,每个元素由键与值两部分组成,通过键可以找到对应的值

  • Collection中的容器称为单列集合,Map中的容器称为双列集合

  • Map中的集合不能包含重复的键,值可以重复,每个键只能对应一个值

  • Map中常用的容器为HashMap,TreeMap

常用方法

方法说明
V put(K key,V value)把key与value添加到Map集合中,返回value
void putAll(Map m)从指定Map中将所有映射关系复制到此Map中
V remove(Object key)删除key对应的value
V get(Object key)根据指定的key,获取对应的value
boolean containsKey(Object key)判断容器中是否包含指定的key
boolean containsValue(Object value)判断容器中是否包含指定的value
Set keySet()获取Map集合中所有的key,存储到Set集合中
Set<Map.Entry<K,V>> entrySet()返回一个Set基于Map.Entry类型包含Map中所有映射
void clear()删除Map中所有的映射

2.HashMap容器类

HashMap是Map接口的接口实现类,采用哈希算法实现,是Map接口最常用的实现类,由于底层采用了哈希表存储数据,所以要求键不能重复,如果发生重复,新的值会替换旧的值。HashMap在查找、删除、修改方面都有非常高的效率。

import java.util.*;
public class HashMapTest {
	public static void main(String[] args) {
		//实例化HashMap容器
		Map<String,String> map = new HashMap<>();
		//1.添加元素,put特点,遇到相同key的元素,会用新的覆盖旧的。
		//返回值有覆盖的情况下,会将旧的value返回,否则为空
		map.put("a", "A");
		String value = map.put("a", "B");
		System.out.println(value);
		//2.获取元素  第一种方式,通过key获得,弊端:如果想获取Map中所有value,要知道所有key,太麻烦
		//要多次调用才行,不好不好
		System.out.println("----------------");
		String val = map.get("a");
		System.out.println(val);
		//第二种方式,通过keySet配合get方法
		//keySet将Map中所有的key组合成一个set的方式集合起来
		System.out.println("----------------");
		map.put("b", "B");
		map.put("c", "C");
		map.put("d", "D");
		Set<String> keys = map.keySet();
		for(String key:keys) {
			String v1 = map.get(key);
			System.out.println(key+"--"+v1);
		}
		//第三种方式,通过entrySet方法获取Map.Entry类型获取元素
		System.out.println("----------------");
		//Entry是一个内部接口,要通过外部接口.内部接口,把键值对打散放入Set中
		Set<Map.Entry<String,String>> entrySet = map.entrySet();
		//遍历set
		for(Map.Entry<String,String> entry:entrySet) {
			String key = entry.getKey();
			String v = entry.getValue();
			System.out.println(key+"----"+v);
		}
		//3.Map容器的并集操作,泛型必须相同
		System.out.println("----------------");
		
		Map<String,String> map1 = new HashMap<>();
		map1.put("f", "F");
		//注意观察key为c的value值
		map1.put("c", "cc");
		map1.putAll(map);
		Set<String> keys2 = map1.keySet();
		//这里的结果是map1并map
		for(String key:keys2) {
			String v2= map1.get(key);
			System.out.println(key+"--"+v2);
		}
		//4.Map容器删除元素
		System.out.println("----------------");
		String val1 = map.remove("d");
		Set<String> set2 = map.keySet();
		for(String key:set2) {
			String v2 = map.get(key);
			System.out.println(key+"-----"+v2);
		}
		//5.判断Key和value是否存在
		System.out.println("----------------");
		boolean flag1 = map.containsKey("aaaa");
		System.out.println(flag1);
		boolean flag2 = map.containsKey("a");
		System.out.println(flag2);
		boolean flag3 = map.containsValue("B");
		System.out.println(flag3);
		boolean flag4 = map.containsValue("BB");
		System.out.println(flag4);
	}

}
/*
A
----------------
B
----------------
a--B
b--B
c--C
d--D
----------------
a----B
b----B
c----C
d----D
----------------
a--B
b--B
c--C
d--D
f--F
----------------
a-----B
b-----B
c-----C
----------------
false
true
true
false
*/

3.HashMap底层实现

Java中HashMap的底层实现与源码分析_lipengfei0427的博客-CSDN博客

接上上一篇

4.TreeMap容器类

TreeMap和HashMap同样实现了Map接口,所以,对于API的用法来说是没有区别的,HashMap效率高于TreeMap,TreeMap是可以对键进行排序的一种容器,在需要对键排序时可选用TreeMap。TreeMap底层是基于红黑树实现的。

在使用TreeMap时需要给定排序规则:

  • 元素自身实现比较规则

  • 通过比较器实现比较规则

//自身实现比较规则,Users类上面的笔记有,翻一翻
import java.util.*;
public class TreeMapTest {
	public static void main(String[] args) {
		//实例化TreeMap
		Map<Users,String> map = new TreeMap<>();
		Users u1 = new Users("li1",3);
		Users u2 = new Users("li2",4);
		map.put(u1,"li1");
		map.put(u2, "li2");
		Set<Users> keys = map.keySet();
		for(Users key:keys) {
			System.out.println(key+"---"+map.get(key));
		}
	}
}
//通过比较器实现比较规则,Student类和StudentComparator比较器上面都有,翻一翻
import java.util.*;
public class TreeMapTest02 {
	public static void main(String[] args) {
		Map<Student,String> treemap = new TreeMap<>(new StudentComparator());
		Student s1 = new Student("li1",18);
		Student s2 = new Student("li2",22);
		Student s3 = new Student("li1.5",22);
		treemap.put(s1,"li1");
		treemap.put(s2, "li2");
		treemap.put(s3,"li1.5");
		Set<Student> keys = treemap.keySet();
		for(Student key:keys) {
			System.out.println(key+"---"+treemap.get(key));
		}

	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值