黑马程序员—————Map集合
2015-05-20 13:49
267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
Map集合概述:
该集合和Collection集合最大的区别是:Collection直接存放值,而Map集合存放的是键值对。
Map集合常见方法
4000
:
Map集合是一对一对往里存放的,而且要保证键的唯一性。
1.添加
put(K key,V value);
putAll(Map<? extends K,? extends V> 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集合中的键进行排序。
实例:
运行结果:
![](https://img-blog.csdn.net/20150520170435273?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXVfamlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Map集合的遍历:
map集合有两种方式:keySet 和entrySet
keySet:将Map中的所有键存入set集合中,因为set具有迭代器,这样可以迭代出所有的键,然后在根据get方法得到值。
entrySet:将map集合转换为set集合,再通过迭代器取出。这里存放的是关系,这个关系是Map.Entry
![](https://img-blog.csdn.net/20150520171022670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXVfamlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
TreeMap练习:
要求:字母出现的次数。例如acbaac-------a(3)b(1)c(2)....
思路:
1、将字符串用作数组存放起来。定义一个map集合,因为结果是按字母顺序,所以用TreeSet
2、遍历数组,得到每个元素,作为键在map集合中去找,如果没有,那么把(a,1)这个键值对存进入,如果找到,那么就把值加1.
3、最后定义StringBuffer把map集合按照规定的格式打印出来。
代码:
运行结果:
![](https://img-blog.csdn.net/20150520175411712?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXVfamlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Map集合扩展:
要求:传智播客-----就业班,预热班
学生-----------班号,姓名
思路:
1.互相之间有关系,那么就是键值对,所以用Map集合
2.这里用到了Map集合嵌套,学校嵌套班级,班级嵌套学生
优化:学生类对象,这也能代表一种关系,班号和姓名,这样就只要是一个List集合即可。
代码:
运行结果:
-------
Map集合概述:
该集合和Collection集合最大的区别是:Collection直接存放值,而Map集合存放的是键值对。
Map集合常见方法
4000
:
Map集合是一对一对往里存放的,而且要保证键的唯一性。
1.添加
put(K key,V value);
putAll(Map<? extends K,? extends V> 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<String,String> map=new HashMap<String,String>(); //添加元素,如果键相同,那么久就会覆盖原来的值,并用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集合的遍历:
map集合有两种方式:keySet 和entrySet
keySet:将Map中的所有键存入set集合中,因为set具有迭代器,这样可以迭代出所有的键,然后在根据get方法得到值。
entrySet:将map集合转换为set集合,再通过迭代器取出。这里存放的是关系,这个关系是Map.Entry
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<Character,Integer> map=new TreeMap<Character,Integer>(); //定义一个变量,记录出现的次数 int count=1; //变量数组 for(int i=0;i<arr.length;i++){ if(map.containsKey(arr[i])){ count=map.get(arr[i]);//先得到键所对应的值,然后在此基础上加1. count++; map.put(arr[i], count); }else { map.put(arr[i],count);//如果没有键,那就加入到集合,次数为1. } count=1;//防止其他键所对应的值叠加,每个键都对应自己的次数。所以要初始化一次。 } System.out.println(map); //遍历集合 Set<Character> keySet=map.keySet(); Iterator<Character> 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集合扩展:
要求:传智播客-----就业班,预热班
学生-----------班号,姓名
思路:
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<Student> yure=new ArrayList<Student>(); List<Student> jiuye=new ArrayList<Student>(); //学校和班的关系 Map<String,List<Student>> czbk=new TreeMap<String,List<Student>>(); 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<Map.Entry<String,List<Student>>> entry=czbk.entrySet(); Iterator<Map.Entry<String,List<Student>>> it=entry.iterator(); while(it.hasNext()){ Map.Entry<String,List<Student>> me=it.next(); //得到班级 String room=me.getKey(); System.out.println(room); //得到班级的学生信息 List<Student> s=me.getValue(); getInfo(s); } } public static void getInfo(List<Student> s){ Iterator<Student> 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 + "]"; } }
运行结果:
相关文章推荐
- 黑马程序员——Thread.interrupt()清除线程冻结状态
- 黑马程序员-Eclipse 的快捷键
- 黑马程序员 IO流(一)
- 黑马程序员-银行业务调度系统学习笔记
- 黑马程序员_Java基础03天日志
- 黑马程序员------集合
- 黑马程序员——String、Integer、StringBuffer和API类中的常用方法
- 黑马程序员——继承
- 黑马程序员13-写在进黑马之前
- 黑马程序员——面向对象三大特征(封装、继承、多态)
- 黑马程序员-黑马测试题
- 黑马程序员--06-图形界面技术
- 黑马程序员——银行业务调度系统
- 黑马程序员 - 技术blog03 by 八戒
- 黑马程序员----拜拜DOS,helloGUI
- 黑马程序员——C语言——文件读写
- 黑马程序员——TreeSet实现按字符串长度排序,复写Comparator()接口的compare()方法
- 黑马程序员——抽象类, 接口, Object类
- 黑马程序员——Java Annotation
- 黑马程序员——泛型学习