java基础<集合框架——Map集合>
2013-11-07 11:06
423 查看
Map概述
一、概述此接口是 Java Collections Framework 的成员。
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map又被叫做——双列集合
二、Map集合共性功能
1.添加
pub(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集合分类
1.Hashtable
底层是哈希表数据结构,不可以存入null键和null值,该集合是线程同步的。(用作键的对象必须实现
hashCode方法和
equals方法。)
2.HashMap
底层是哈希表数据结构,允许使用null键和null值,该集合是不同步的。(除了非同步和允许使用 null 之外,HashMap 类与
Hashtable 大致相同。)
3.TreeMap
底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序
*****Map和Set很像,因为Set集合底层就是使用了Map集合*****
Map集合共性方法
一、代码PS:上一节中提到的Map集合众多共性方法中,只对 keySet( )和 entrySet() 方法做代码解释
1.keySet() ——返回该Map集合的键值Set集合
import java.util.*; class MapDemo { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("1","zhangsan"); map.put("2","lisi"); map.put("3","wangzu"); Set<String> keySet=map.keySet(); Iterator<String> it=keySet.iterator(); while(it.hasNext()) { System.out.println(map.get(it.next())); } } }2.entrySet()
import java.util.*; class MapDemo2 { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("1","zhangsan"); map.put("2","lisi"); map.put("3","wangzu"); Set<Map.Entry<String,String>> entrySet=map.entrySet(); Iterator<Map.Entry<String,String>> it=entrySet 4000 .iterator(); while(it.hasNext()) { Map.Entry<String,String> entry=it.next(); System.out.println(entry.getKey()+"..."+entry.getValue()); } } }
Map练习(HashMap和TreeMap)
一、练习每一个学生都有对应的归属地。
学生student,地址String
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
1.描述学生。
2.定义map容器,将学生作为键,地址作为值,存入。
3.获取map集合中的元素。
二、代码
import java.util.*; class Student implements Comparable<Student> { private String name; private int age; public int compareTo(Student s) { if(s.age==this.age) return this.name.compareTo(s.name); return new Integer(this.age).compareTo(new Integer(s.age)); } Student(String name,int age) { this.name=name; this.age=age; } public int hashCode() { return name.hashCode()+age*34; } public boolean equals(Object obj) { if(!(obj instanceof Student)) throw new ClassCastException("类型不匹配"); Student s=(Student)obj; return s.name.equals(this.name)&&s.age==this.age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return name+":"+age; } } class TreeMapPractiseDemo { public static void main(String[] args) { TreeMap<Student,String> hm=new TreeMap<Student,String>(); hm.put(new Student("zhangsan",12),"山东"); hm.put(new Student("lisi",14),"天津"); hm.put(new Student("wangwu",15),"上海"); hm.put(new Student("zhaoliu",11),"辽宁"); hm.put(new Student("zhaoliu",11),"北京");//将原来相同Student对象取代 Set<Student> set=hm.keySet(); Iterator<Student> it=set.iterator(); while(it.hasNext()) { Student s=it.next(); System.out.println(s.getName()+":"+s.getAge()+"___"+hm.get(s)); } Set<Map.Entry<Student,String>> set1=hm.entrySet(); Iterator<Map.Entry<Student,String>> it1=set1.iterator(); while(it1.hasNext()) { Map.Entry<Student,String> me=it1.next(); System.out.println(me.getKey().getName()+":"+me.getKey().getAge()+"————"+me.getValue()); } } }
TreeMap练习——字母出现的次数
一、练习”isdjifsakdjsakdj"获取该字符串中的字母的出现次数。
希望打印结果:a(1)c(2)
二、分析
通过结果发现,每一个字母都有对应的次数,说明字母和次数之间都有映射关系。
三、思路
1.将字符串转换成字符数组,因为要对每一个字母进行操作。
2.定义一个map集合,因为打印结果的字母有顺序,所以使用Treemap集合。
3.遍历字符数组。
将每一个字母作为键去查map集合。
如果返回null,将该字母和1存入到map集合中。
如果返回不是null,说明该字母在map集合已经存在并有对应次数,那么就获取这个次数并自增1,让后将该字母和自增1后的数据继续存入TreeMap
4.将map集合中的数据变成指定的字符串形式返回。
四、代码
import java.util.*; class TreeMapNumberDemo { public static void main(String[] args) { String str="isdjifsakdjsakdj"; char[] c=str.toCharArray(); TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>(); for(int i=0;i<c.length;i++) { if(tm.get(c[i])==null) { tm.put(c[i],1); } else { int count=tm.get(c[i]); tm.put(c[i],++count); } } StringBuilder sb=new StringBuilder(); Set<Map.Entry<Character,Integer>> set=tm.entrySet(); Iterator<Map.Entry<Character,Integer>> it=set.iterator(); while(it.hasNext()) { Map.Entry<Character,Integer> me=it.next(); sb.append(me.getKey()+"("+me.getValue()+")"); } System.out.println(sb.toString()); } }
Map扩展
一、练习一个学校有四个班级——1班,2班,3班,4班
每个班级都有30名学生,他们有各自的年龄和学号
用Map集合来描述他们。
二、代码
import java.util.*; class SchoolMapDemo { public static void main(String[] args) { TreeMap<String,TreeMap<Integer,String>> school=new TreeMap<String,TreeMap<Integer,String>>(); TreeMap<Integer,String> class1=new TreeMap<Integer,String>(); TreeMap<Integer,String> class2=new TreeMap<Integer,String>(); TreeMap<Integer,String> class3=new TreeMap<Integer,String>(); TreeMap<Integer,String> class4=new TreeMap<Integer,String>(); school.put("1班",class1); school.put("2班",class2); school.put("3班",class3); school.put("4班",class4); putStudent(class1); putStudent(class2); putStudent(class3); putStudent(class4); //getStudentsOfClass("1班",school); getStudentsOfSchool(school); } public static void getStudentsOfSchool(TreeMap<String,TreeMap<Integer,String>> school) { Set<Map.Entry<String,TreeMap<Integer,String>>> set=school.entrySet(); Iterator<Map.Entry<String,TreeMap<Integer,String>>> it=set.iterator(); while(it.hasNext()) { Map.Entry<String,TreeMap<Integer,String>> me=it.next(); getStudentsOfClass(me.getKey(),school); } } public static void putStudent(TreeMap<Integer,String> class1) { class1.put(01,"zhangsan"); class1.put(02,"lisi"); class1.put(03,"wangwu"); class1.put(04,"zhaoliu"); } public static void getStudentsOfClass(String name,TreeMap<String,TreeMap<Integer,String>> school) { if(school.get(name)==null) { System.out.println("您输入的教室不存在"); } else { TreeMap<Integer,String> tm=school.get(name); Set<Map.Entry<Integer,String>> set=tm.entrySet(); Iterator<Map.Entry<Integer,String>> it=set.iterator(); while(it.hasNext()) { Map.Entry<Integer,String> ke=it.next(); System.out.println(name+"——"+ke.getKey()+":"+ke.getValue()); } } } }
相关文章推荐
- <java——集合框架>
- OC语法<4.2>:Foundation框架中的集合类-NSArray
- 使用Java实现面向对象编程--集合框架-->List接口
- 程序员_Java基础之<七>-集合框架
- 集合框架学习笔记<二>
- 使用Java实现面向对象编程--集合框架-->Vector和ArrayList
- Java基础知识强化之集合框架笔记54:Map集合之HashMap集合(HashMap<String,String>)的案例
- 使用Java实现面向对象编程--集合框架-->迭代器Iterator
- 黑马程序员 Java基础<七>---> 集合框架
- Java基础--集合框架<一>
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
- 黑马程序员——>第十五天<集合框架(TreeSet-泛型)>
- Java基础--集合框架<二>
- Java基础知识强化之集合框架笔记55:Map集合之HashMap集合(HashMap<Integer,String>)的案例
- 集合框架学习笔记<三>
- Java基础知识强化之集合框架笔记56:Map集合之HashMap集合(HashMap<String,Student>)的案例
- Java基础-->集合框架
- 《黑马程序员》java笔记->集合框架集合大总结
- 黑马程序员——>第十六天<集合框架(Map)>
- 黑马程序员——Java基础->集合框架