JAVA Map类代码解析,Map中键值对的两种取出方式

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA Map类代码解析,Map中键值对的两种取出方式相关的知识,希望对你有一定的参考价值。

Map中键值对的两种取出方式

1,Set keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。

class  MapTest

	public static void main(String[] args) 
	
		HashMap<Student,String> hm = new HashMap<Student,String>();

		hm.put(new Student("lisi1",21),"beijing");
		hm.put(new Student("lisi1",21),"tianjin");
		hm.put(new Student("lisi2",22),"shanghai");
		hm.put(new Student("lisi3",23),"nanjing");
		hm.put(new Student("lisi4",24),"wuhan");

		//第一种取出方式 keySet

		Set<Student> keySet = hm.keySet();

		Iterator<Student> it = keySet.iterator();

		while(it.hasNext())
		
			Student stu = it.next();
			String addr = hm.get(stu);
			System.out.println(stu+".."+addr);
		


		//第二种取出方式 entrySet
		Set<Map.Entry<Student,String>> entrySet = hm.entrySet();

		Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
		
		while(iter.hasNext())
		
			Map.Entry<Student,String> me = iter.next();
			Student stu = me.getKey();
			String addr = me.getValue();
			System.out.println(stu+"........."+addr);
		
	

以下代码摘自B站毕向东老师视频所敲的代码,除了音质有些差,讲的还是很不错的,这里是传送门:
毕向东Java基础教程(适合初学者入门的Java基础视频)

/*
练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
*/
import java.util.*;
class  MapTest3

	public static void main(String[] args) 
	
		String s= charCount("ak+abAf1c,dCkaAbc-defa");
		System.out.println(s);
	
	
	public static String charCount(String str)
	
		char[] chs = str.toCharArray();//将字符串转为字符数组

		TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
		
		int count = 0;
		for(int x=0; x<chs.length; x++)
		
		
			if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
				continue;

			Integer value = tm.get(chs[x]);
			
			if(value!=null)
				count = value;
			count++;
			tm.put(chs[x],count);//直接往集合中存储字符和数字,为什么可以,因为自动装箱。

			count = 0;
		

		StringBuilder sb = new StringBuilder();//StringBuilder可以对字符串对象进行快速操作

		Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
		Iterator<Map.Entry<Character,Integer>>  it = entrySet.iterator();

		while(it.hasNext())
		
			Map.Entry<Character,Integer> me = it.next();
			Character ch = me.getKey();
			Integer value = me.getValue();
			sb.append(ch+"("+value+")");
		

		return sb.toString();
	



上述代码有以下值得记录的内容

1.将字符串转为字符数组

char[] chs = str.toCharArray();//将字符串转为字符数组

2.StringBuilder可以对字符串对象进行快速操作

StringBuilder sb = new StringBuilder();//StringBuilder可以对字符串对象进行快速操作


3.关于Map.Entry

Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();

可以认为是对Map的键和值进行打包,这样,可以通过getKey()和getValue()对其中的值进行访问。

		Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
		Iterator<Map.Entry<Character,Integer>>  it = entrySet.iterator();

		while(it.hasNext())
		
			Map.Entry<Character,Integer> me = it.next();
			Character ch = me.getKey();
			Integer value = me.getValue();
			sb.append(ch+"("+value+")");
		

Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。通过这个集合的迭代器,获得每一个条目(唯一获取方式)的键或值并对值进行更改。Map.Entry中的常用方法如下所示:
(1) Object getKey(): 返回条目的关键字
(2) Object getValue(): 返回条目的值
(3) Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值

Map的总结

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
2,删除。
clear()
remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取。
get(Object key)
size()
values()
entrySet()
keySet()

Map
|–Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|–HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|–TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

和Set很像。
其实大家,Set底层就是使用了Map集合。

参考:
[1] https://www.runoob.com/java/java-stringbuffer.html
[2] https://blog.csdn.net/songfeihu0810232/article/details/80156626

以上是关于JAVA Map类代码解析,Map中键值对的两种取出方式的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么样获取Map中第几个键值对

mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考

Java源码分析集合部分总结

Java的HashMap键值对存储结构解析

Map常用功能

获取 RocksDB 中键值对的总数