您的位置:首页 > 职场人生

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

2014-09-19 23:57 1076 查看
------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> 键值对的特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐