JAVA学习日记:集合框架(6)

本节课我学习的主要内容有:

1.Map接口
2.HashMap类
3.LinkedHashMap类
4.SortedMap接口
5.TreeMap类
6.所有Map的遍历

Map接口:

属于java.util包
	  	Java中的Map储存的是成对的对象组,对象组可以是一个元素也可以拆开来分成Map中不同元素
	 		Map中每个元素都是有一个关键值(key)来一一对应的,key不可以重复,元素可以重复。
  		
  		Map接口和Collection接口相互独立。
  
  		常用方法:
  			对于基本操作:
  				size,isEmpty,containsKey,containsValue,put,
  				remove,replace
  			
  			对于组操作:
  				clear,putAll,replaceAll
 			
  			对于视图操作:
  				keyset,values,entrySet
 
  			对于比较操作:
  				equals,hashCode

HashMap类:

		HashMap<K,V> extends AbstractMap<K,V>
		implements Map<K,V>, Cloneable, Serializable
		
		是实现了Map接口的类我们比较常用,它允许存入null作为key,
  		以及运行null作为多个值。
  
  		键值对的存入顺序和存储顺序不一致。
  		要想有序可以使用LinkedHashMap来实现。
  
  		对线程安全没有要求的话用HashMap比HashTable效率高。

LinkedHashMap类:

		继承HashMap,实现了Map接口。
		自动排序

SortedMap接口和TreeMap类:

		SrotedMap以有序方式来保存键值对。
  		排序方式和SrotedSet一样是自然排序或者实现Comparator。
 
  		一般用TreeMap来实现SrotedMap。

所有Map的遍历:

		运用forEach方法遍历。
 		用entrySet方法获取entry的set集合,从而来获取到值和键。
  		用keySet方法获得key的set集合,遍历key得到对应的值。(常用)
  		用values方法获取值的set集合,遍历输出。(此方法不能获取key)

MapTest类(测试今日所学所有):

package LessonForMap;

import java.util.*;
import java.util.Map.*;

class Game
{
	private String name;
	
	public Game(String name)
	{
		this.name = name;
	}
	
	public String getName()
	{
		return this.name;
	}
}

public class MapTest 
{
	public static void main(String[] args) 
	{
		Map<String,String> m1 = new HashMap<String,String>();
		m1.put("001", "zlm1");
		m1.put("002", "zlm2");
		m1.put("003", "zlm3");
		m1.put("004", "zlm4");
		m1.put("005", "zlm5");
		m1.put("005", "zlm6");//	其中zlm6和zlm5同key
		System.out.println("key为001对应的数值:"+m1.get("001"));
		
		//Map的遍历
		//keySet方法
		Set<String> s1 = m1.keySet();//Set继承自Collection所以有迭代器方法
		
		System.out.println("-------iterator-------");
		Iterator<String> i1 = s1.iterator();
		while (i1.hasNext())
		{
			String m1skey = i1.next();
			System.out.println("m1中的值"+m1.get(m1skey)+"对应的key为:"+m1skey);
			//	遍历输出的结果可以看出同名的key存入后者会将前者覆盖。
		}
		
		System.out.println("-------value forEach-------");
		s1.forEach((k)->{
			System.out.println("m1中有:"+m1.get(k));
		});
		
		System.out.println("-------value method-------");
		Collection<String> stra1 = m1.values();
		
		Iterator<String> i2 = stra1.iterator();
		while (i2.hasNext())
		{
			String m1skey = i2.next();
			System.out.println("m1中有:"+m1skey);
		}
		stra1.forEach((k1)->{
			System.out.println("用forEach遍历m1中有:"+k1);
		});
		
		System.out.println("-------entrySet-------");
		Set<Entry<String,String>> se = m1.entrySet();
		se.forEach((k2)->{
			System.out.println("用entrySet方法遍历m1中有:"+k2.getValue()+"	对应的键为:"+k2.getKey());
		});
		
		System.out.println("-------Map's forEach-------");
		m1.forEach((kk,kv)->{
			System.out.println("用Map中的forEach方法遍历m1中有:"+kv+"	对应的键为:"+kk);
		});
		
		System.out.println("-------custom object-------");
		
		Game g1 = new Game("ZELDA");
		Game g2 = new Game("MIRROR");
		Game g3 = new Game("MARIO");
		Game g4 = new Game("MHW");
		Map<String,Game> m2 = new HashMap<String,Game>();
		m2.put("1", g1);
		m2.put("2", g2);
		m2.put("3", g3);
		m2.put("4", g4);
		m2.forEach((kk1,kv1)->{
			System.out.println("用Map中的forEach方法遍历m2中有:"+kv1.getName()+"	对应的键为:"+kk1);
		});
		
		System.out.println("-------LinkedHashMap-------");
		LinkedHashMap<String,String> m3 = new LinkedHashMap<String,String>();		
		m3.put("001", "zlm1");
		m3.put("003", "zlm3");
		m3.put("004", "zlm4");
		m3.put("002", "zlm2");
		m3.put("005", "zlm5");
		
		Set<String> s3 = m3.keySet();
		s3.forEach((kk4)->{
			System.out.println("LinkedHashMap中的元素有:"+m3.get(kk4)+" 对应的排好队的键为:"+kk4);
		});
		
		System.out.println("-----------------------------------------------------");
		TreeMap<String,String> tm = new TreeMap<String,String>();
		tm.put("a", "aa");
		tm.put("c", "ca");
		tm.put("d", "da");
		tm.put("b", "aa");
		
		Set<String> s2 = tm.keySet();
		s2.forEach((kk2)->{
			System.out.println("s2中的元素有:"+tm.get(kk2)+"	自动排序过后的键为:"+kk2);
		});
	}
}

本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。

2020.11.3
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值