黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap

来源:互联网 发布:ubuntu 路径 编辑:程序博客网 时间:2024/06/05 04:52
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
黑马程序员 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> 键值对的特性
0 0