黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap
2014-09-19 23:57
1076 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap
《黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap》
结束了集合框架中的 Map接口以及常用了类HashMap、TreeMap、HashTable ,主要体现的Map<K,V> 键值对的特性
黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap
1集合框架中Map 概述
package day16Map; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class MapDemo { /* * Map 集合 * 该集合存储键值对 * 一对一对的往里存 * 而且要保证键 的唯一性 * * 1:添加 * put(K key, V value) * putAll(Map<? extends K,? extends V> m) * 2:删除 * clear * remove(Object key) * 3:判断 * containsKey(Object key) * containsValue(Object key) * isEmpty() * 4:获取元素 * get(Object key) * Collection<V> values() * * entrySet() * keySet * Map * |--HashTable: * 相同:底层是Hash表,不可以存入null; * 不同:线程同步的 * 此类实现一个哈希表 * 该哈希表将键映射到相应的值 * 任何非 null 对象都可以用作键或值。 * |--HastMap:底层是Hash表 * 相同:基于哈希表的 Map 接口的实现 * 不同:并允许使用 null 值和 null 键 * 除了非同步和允许使用 null 之外 * HashMap 类与 Hashtable 大致相同 * |--TreeMap: * 底层是二叉树 * 线程不同步 * 对键 进行排序 * 和Set很像 * 其实:Set底层就是使用了Map集合 * */ public static void main(String[] args) { Map<String,String> m=new HashMap<String,String>(); //添加元素 System.out.println(m.put("01", "zs1")); System.out.println(m.put("01", "qqqzss1")); //put方法当存入相同的键时,会替换原来键对应的值,put还将该值返回 m.put("02", "zs2"); m.put("03", "zs3"); m.put(null, "zs3");//可以通过 System.out.println("containsKey:"+m.containsKey("01")); // System.out.println("containsKey:"+m.remove("01")); System.out.println("m:"+m); // System.out.println("get:"+m.get(null));//可以应用 Collection<String> c=m.values(); System.out.println("collection:"+c); } }
2Map取出元素的方法keySet 、entrySet
package day16Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo2 { /*Map集合的取出方式;;两种 * 1:keySet()将Map中的所有键存入Set集合, * 因为Set具备迭代器。可以通过迭代方式取出键 * 然后是get方法获取值 * Map集合的取出原理: * 将Map---》set---》迭代器 * 2:Set<Map.entry<k,v>>entrySet * 将Map集合中的映射关系存入到Set集合中, * 而这个关系的数据类型就Map.entry * * Mao.Entry 其实Entry也是一个接口 * 他是Map接口中的内部接口 * * interface Map{ * public static interface Entry{ * public abstract Object getKey(); * public abstract Object getValue(); * } * } * * class HashMaop implement Map{ * class Haha implement Map.entry{ * * public Object getKey(){ * } * public Object getValue(){ * * } * } * } * */ public static void main(String[] args) { Map<String,String> m=new HashMap<String,String>(); System.out.println(m.put("01", "zs1")); System.out.println(m.put("01", "qqqzss1")); m.put("02", "zs2"); m.put("03", "zs3"); // 先或Map集合 的所有键 存在的集合 Set<String> s=m.keySet(); for (Iterator<String> iterator = s.iterator(); iterator.hasNext();) { String string = iterator.next(); System.out.print("key:"+string); System.out.println("-->value:"+m.get(string)); } //将Map集合的映射关系取出。放在Set集合中 Set<Map.Entry<String, String>> sm=m.entrySet(); for (Iterator<Map.Entry<String, String>> iterator = sm.iterator(); iterator.hasNext();) { Map.Entry<String, String> entry = iterator.next(); String key=entry.getKey(); String value=entry.getValue(); System.out.println("key:"+key+"==value:"+value); } } }
3将自定义对象存入Map值,用地址作为键。相同姓名年龄视为同一元素
package day16Map; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeSet; public class MapTest { /* * 每一个学生都有对应的归属地。 * 学生Student,地址String。 * 学生属性:姓名,年龄。 * 注意:姓名和年龄相同的视为同一个学生。 * 保证学生的唯一性。 * 1:定义学生类 * 2:定义Map 学生为键,地址为值 存入Map * 3;获取Map中的元素 */ public static void main(String[] args) { System.out.println("------------------Map HashMap----------"); Map<Student,String> m=new HashMap<Student,String>(); sop(m.put( new Student("a",4, "山东"),"山东")); sop(m.put( new Student("b",2, "北京"),"北京")); sop(m.put( new Student("c",3, "上海"),"上海" )); sop(m.put( new Student("d",3, "上海"),"上海" )); sop(m.put( new Student("c",3, "上海"),"上海")); //第一种 Map keySet方法 Set<Student> s=m.keySet(); for (Iterator<Student> iterator = s.iterator(); iterator.hasNext();) { Student student = iterator.next(); System.out.println(student.toString()); } //第 2 种 Map entrySet方法 System.out.println("----------- Map entrySet-------------"); Set<Map.Entry<Student, String>> sme=m.entrySet(); for (Iterator<Map.Entry<Student, String>> iterator = sme.iterator(); iterator.hasNext();) { Map.Entry<Student, String> entry =iterator.next(); System.out.print("getKey:"+entry.getKey()); System.out.println("->getValue:"+entry.getValue()); } System.out.println("------------------Set TreeSet----------"); Set<Student> set=new TreeSet<Student>(); sop(set.add( new Student("a",4, "山东") )); sop(set.add( new Student("b",2, "北京") )); sop(set.add( new Student("c",3, "上海") )); sop(set.add( new Student("d",3, "上海") )); sop(set.add( new Student("c",3, "上海") )); for (Iterator<Student> iterator =set.iterator(); iterator.hasNext();) { Student student = iterator.next(); System.out.println(student); } } static void sop(Object o){ System.out.println(o); } } class Student implements Comparable<Student>{ private String name; private int age; private String address; public Student( String name,int age,String address) { this.name=name; this.age=age; this.address=address; } public String getName() { return name; } public int getAge() { return age; } public String getAddress() { return address; } public boolean equals(Object obj){ if(!(obj instanceof Student)){ throw new RuntimeException("不是Student"); } Student s=(Student) obj; return (this.name.equals(s.getName())&&this.age==s.getAge()); } public int hashCode(){ return name.hashCode()+address.hashCode()+age; } public String toString(){ return ("name:"+name+"; age"+age+"; address"+address); } public int compareTo(Student o) { int num=new Integer(this.age).compareTo(new Integer(o.age)); if(num==0) return this.name.compareTo(o.name); return num; } }
4对学生对的年龄进行升序排序:创建比较器
package day16Map; import java.util.Comparator; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class MapTest2 { /* * 需求:对学生对的年龄进行升序排序 * * 以为数据时以键值对的形式存在的 * 所以要使用可以排序的Map 集合 :TreeMap*/ public static void main(String[] args) { TreeMap<Student,String> m=new TreeMap<Student,String>(new ComSutentByName()); sop(m.put( new Student("a",4, "山东"),"山东")); sop(m.put( new Student("b",2, "北京"),"北京")); sop(m.put( new Student("c",3, "上海"),"上海" )); sop(m.put( new Student("d",3, "上海"),"上海" )); sop(m.put( new Student("c",3, "上海"),"上海")); Set<Map.Entry<Student,String>> s=m.entrySet(); for (Iterator<Map.Entry<Student,String>> iterator = s.iterator(); iterator.hasNext();) { Map.Entry<Student,String> entry = iterator.next(); System.out.print("getKey:"+entry.getKey()); System.out.println("getValue:"+entry.getValue()); } } static void sop(Object o){ System.out.println(o); } } class ComSutentByName implements Comparator<Student>{ public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } }
5获取该字符串中字母出现的次数
package day16Map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapTest3 { /* * "sagfhgfhgfccyt" * 获取该字符串中字母出现的次数 * 希望打印 * a(1) c(2)*/ public static void main(String[] args) { String testStr="121sagfhgfhgfccyt"; Map<Character,Integer> m=new HashMap<Character,Integer>(); for (int i = 0; i < testStr.length(); i++) { Character key=testStr.charAt(i); if(m.containsKey(key)){ m.put(key, m.get(key)+1); }else{ m.put(key, 1); } } Set<Character> s=m.keySet(); for (Iterator<Character> iterator = s.iterator(); iterator.hasNext();) { Character character = iterator.next(); System.out.print(character+"("+m.get(character)+")"); } } }
6
HashMap<String,HashMap<String,String>>
or
HashMap<String,List<Student>>
</pre><pre name="code" class="java">package day16Map; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; public class MapDemo3 { /* * Map 扩展知识 * map集合被使用时因为具有映射关系 * * "yureban" Student("01" "zhangsan"); * "yureban" Student("02" "lisi"); * "jiuyeban" "01" "wangwu"; * "jiuyeban" "02" "zhaoliu"; * */ public static void main(String[] args) { HashMap<String,String> hmyr=new HashMap<String,String>(); hmyr.put("01", "zhangsan"); hmyr.put("02", "lisi"); HashMap<String,String> hmjy=new HashMap<String,String>(); hmjy.put("01", "zhaoliu"); hmjy.put("02", "wangwu"); HashMap<String,HashMap<String,String>> chuanzhi=new HashMap<String,HashMap<String,String>>(); chuanzhi.put("yure", hmyr); chuanzhi.put("jiuye", hmjy); Set<String> s=chuanzhi.keySet(); for (Iterator<String> iterator = s.iterator(); iterator.hasNext();) { String type = iterator.next(); HashMap<String,String> h=chuanzhi.get(type); getBan(h); } System.out.println("------------demo-------------"); demo(hmjy); } static void getBan(HashMap<String,String> h){ Set<String> banSet=h.keySet(); for (Iterator<String> iterator2 = banSet.iterator(); iterator2.hasNext();) { String string = iterator2.next(); System.out.println("id:"+string+"name:"+h.get(string)); } } static void demo(HashMap<String,String> h){ HashMap<String,List<Student>> chuanzhi=new HashMap<String,List<Student>>(); List<Student> yureList=new ArrayList<Student>(); List<Student> jiuyeList=new ArrayList<Student>(); yureList.add(new Student("a",1,"beijing")); yureList.add(new Student("b",2,"beijing")); jiuyeList.add(new Student("c",3,"beijing")); jiuyeList.add(new Student("c",3,"beijing")); getBanList(yureList); getBanList(jiuyeList); } static void getBanList(List<Student> h){ for (Iterator<Student> iterator2 = h.iterator(); iterator2.hasNext();) { Student string = iterator2.next(); System.out.println("name:"+string.getName()+"age:"+string.getAge()); } } }
《黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap》
结束了集合框架中的 Map接口以及常用了类HashMap、TreeMap、HashTable ,主要体现的Map<K,V> 键值对的特性
相关文章推荐
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 工具类 Collections and Arrays
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 List Set
- 黑马程序员_学习笔记:10) 集合框架2:Set(HashSet、TreeSet)、Map(Hashtable、HashMap、TreeMap)、Collections、Arrays
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
- Java基础之集合框架(三)--Map、HashMap、TreeMap
- Java基础之集合框架(三)--Map、HashMap、TreeMap
- 黑马程序员 java 基础 毕向东 面向对象 多态
- Java基础知识强化之集合框架笔记54:Map集合之HashMap集合(HashMap<String,String>)的案例
- 黑马程序员——JAVA基础------集合框架(四)----Map集合
- 黑马程序员--java基础--集合框架Set,集合框架map
- 黑马程序员——Java语言基础:集合框架(Collection、Map,工具类Collections、Arrays)
- Java基础知识强化之集合框架笔记56:Map集合之HashMap集合(HashMap<String,Student>)的案例
- Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值
- 黑马程序员:Map集合:Hashtable、HashMap、TreeMap介绍
- 黑马程序员——java基础——集合框架(二: 双列集合 (Map体系))
- 黑马程序员——Map集合:HashTable,HashMap,TreeMap
- 黑马程序员——java基础——集合框架(2)Map
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- 黑马程序员_毕向东JAVA基础_集合(3)Map&Collections&Arrays&增强for循环
- 黑马程序员_java编程基础17 集合框架Map