黑马程序员—————Map集合

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Map集合概述

该集合和Collection集合最大的区别是:Collection直接存放值,而Map集合存放的是键值对。

    

Map集合常见方法

     Map集合是一对一对往里存放的,而且要保证键的唯一性。

1.添加

put(K key,V value);

putAll(Map m);


2.删除

clear();

remove(Object key);

3.判断

constainsValue(Object value);

constainsKey(object key);

isEmpty();

4.获取

get(Object key);

size();

values();


entirySet();

keySet();


Map接口有常见的几个实现类

实现类:HashMap,hashTable,TreeMap

HashTable:底层是哈希表是数据结构,不可以存入Null键null值,同步的jdk1.0

HashMap:底层是哈希表数据结构,允许使用null键null值,非同步。

TreeMap:底层是二叉树数据结构,不同步,可以拥有给Map集合中的键进行排序。

实例:

package genericity;

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
	public static void main(String[] args){
		Map map=new HashMap();
		//添加元素,如果键相同,那么久就会覆盖原来的值,并用put方法返回被覆盖的值(原来的值)
		System.out.println(map.put("01", "c#"));
		System.out.println(map.put("01", "java"));
		//键和值都可以是null
		map.put(null, "zz");
		map.put("03",null);
		System.out.println("get:"+map.get(null));
		System.out.println("contains:"+map.containsValue(null));
		
		System.out.println(map);
	}
}

运行结果:

黑马程序员—————Map集合_第1张图片


Map集合的遍历

map集合有两种方式:keySet 和entrySet

keySet:将Map中的所有键存入set集合中,因为set具有迭代器,这样可以迭代出所有的键,然后在根据get方法得到值。

entrySet:将map集合转换为set集合,再通过迭代器取出。这里存放的是关系,这个关系是Map.Entry


黑马程序员—————Map集合_第2张图片

TreeMap练习:

要求:字母出现的次数。例如acbaac-------a(3)b(1)c(2)....

思路:

1、将字符串用作数组存放起来。定义一个map集合,因为结果是按字母顺序,所以用TreeSet

2、遍历数组,得到每个元素,作为键在map集合中去找,如果没有,那么把(a,1)这个键值对存进入,如果找到,那么就把值加1.

3、最后定义StringBuffer把map集合按照规定的格式打印出来。

代码:

package Map;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapDemo {
	public static void main(String[] args){
		String s="abdskaabc";
		System.out.println(getCount(s));
	}
	public static String getCount(String s){
		//将字符串转换为数组
		char[] arr=s.toCharArray();
		//定义一个TreeMap集合
		Map map=new TreeMap();
		//定义一个变量,记录出现的次数
		int count=1;
		//变量数组
		for(int i=0;i keySet=map.keySet();
		Iterator it=keySet.iterator();
		//定义StringBuffer,打印格式
		StringBuffer sb=new StringBuffer();
		while(it.hasNext()){
			char c=it.next();
			sb.append(c+"("+map.get(c)+")");
		}
		return sb.toString();
		
	}
}

运行结果:

黑马程序员—————Map集合_第3张图片


Map集合扩展:

要求:传智播客-----就业班,预热班

    学生-----------班号,姓名

思路:

1.互相之间有关系,那么就是键值对,所以用Map集合

2.这里用到了Map集合嵌套,学校嵌套班级,班级嵌套学生


优化:学生类对象,这也能代表一种关系,班号和姓名,这样就只要是一个List集合即可。

代码:

package Map;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapDemo2 {
	public static void main(String[] main){
		//学生用个对象表示,那么久不用map集合来代表其班号和姓名的关系。对象就能代表了
		//预热班和就业班
		List yure=new ArrayList();
		List jiuye=new ArrayList();
		//学校和班的关系
		Map> czbk=new TreeMap>();
		czbk.put("yure", yure);
		czbk.put("jiuye", jiuye);
		
		yure.add(new Student(01,"lisi"));
		yure.add(new Student(02,"wangwu"));
		
		jiuye.add(new Student(01,"mmc"));
		jiuye.add(new Student(02,"mmx"));
		
		//迭代
		Set>> entry=czbk.entrySet();
		Iterator>> it=entry.iterator();
		while(it.hasNext()){
			Map.Entry> me=it.next();
			//得到班级
			String room=me.getKey();
			System.out.println(room);
			//得到班级的学生信息
			List s=me.getValue();
			getInfo(s);
		}
		
	}
	public static  void getInfo(List s){
		
		Iterator it2=s.iterator();
		while(it2.hasNext()){
			Student stu=it2.next();
			System.out.println(stu.toString());
		}
	}
}
class Student{
	private int classId;
	private String name;
	public Student(int classId,String name){
		this.name=name;
		this.classId=classId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getClassId() {
		return classId;
	}
	public void setClassId(int classId) {
		this.classId = classId;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", classId=" + classId + "]";
	}
}


运行结果:

黑马程序员—————Map集合_第4张图片


你可能感兴趣的:(java基础学习笔记)