集合框架之map


Colllection接口是保存单值最大的父接口,那么Map接口保存的内容是一对值,所有的内容是以:key——>value 的形式保存的。

               类似 -----------------------------电话本

               张三----------------------123456

               李四----------------------234567

map接口本身有三个常用的子类

             HashMap  ,    Hashtable  ,     TreeMap

        1-------------------------------------新的子类:HashMap(重点)

                                                   map中的key是不能重复的,如果是重复的内容,则属于覆盖

        

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo01 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		System.out.println(map) ;
	}

}


Map的最大特点是用于查找的操作,如果查找到了则返回内容,否则返回null

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo02 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Integer value = map.get("zhangsan") ;
		System.out.println(value) ;
	}

}

以上的功能是map最常见的一种功能

  还可以将Map中的全部Key以Set集合的形式返回

 

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo03 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			System.out.println(iter.next());
		}
	}

}

还可以在以上的程序上进行扩展,再将全部的值取出。

 

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo04 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + " --> " + map.get(key));
		}
	}

}

从运行结果可以看到HashMap本身也属于无序烦人一种操作

 也可以通过values()方法,将全部的value通过一个Collection接口的形式返回

package org.lxh.mapdemo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapDemo05 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Collection<Integer> col = map.values();// 取得全部value
		Iterator<Integer> iter = col.iterator();
		while (iter.hasNext()) {
			Integer value = iter.next();
			System.out.println(value);
		}
	}

}


2—————————旧的子类:Hashtable

           Hashtable实际上与Vector的产生时代是一样的   也属于最早的集合操作类。之后只是扩展了其应用实现了Map接口

  

package org.lxh.mapdemo;

import java.util.Hashtable;
import java.util.Map;

public class HashtableDemo01 {
 public static void main(String[] args) {
  Map<String, Integer> map = new Hashtable<String, Integer>();
  map.put("zhangsan", 1);
  map.put("zhangsan", 2);
  map.put("lisi", 3);
  map.put("wangwu", 5);
  System.out.println(map);
 }

}

3----------HashMap与Hashtable的区别

                HashMap与Hashtable都是Map接口的子类,既然是Map接口的子类,name这两个类有什么区别??

                            HashMap:是JDK1.2之后推出的,采用异步处理操作,性能高,非线性安全的操作

                            Hashtable:是JDK1.0是推出的,采用同步的处理操作,性能相对较低,线性安全

4—————————按key排序的子类:TreeMap(重点)

              TreeMap使用的时候可以进行按照key的方式进行排序

            

package org.lxh.mapdemo;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo04 {
	public static void main(String[] args) {
		Map<String, Integer> map = new TreeMap<String, Integer>();
		map.put("A、zhangsan", 1);
		map.put("A、zhangsan", 2);
		map.put("C、lisi", 3);
		map.put("B、wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + " --> " + map.get(key));
		}
	}

}


注 ::::::::::::::map不能直接使用Iterator输出

             要想输出则肯定依靠Map.Entry

            Map接口使用Iteartor输出的标准操作

           1.。。通过Map接口中的:Set<Map.Entry<K,V>> entrySet() 方法取得Set集合

            2.。。通过Set接口为Iterator进行初始化的操作

            3.。。通过Iterator取出每一个Map.Entry

            4..。。通过Map.Entry进行key与value的分离

package org.lxh.iteartordemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class IteartorMapDemo {
 public static void main(String[] args) {
  Map<String, Integer> map = new HashMap<String, Integer>();
  map.put("zhangsan", 1);
  map.put("zhangsan", 2);
  map.put("lisi", 3);
  map.put("wangwu", 5);
  Set<Map.Entry<String, Integer>> allSet = null;
  allSet = map.entrySet();
  Iterator<Map.Entry<String, Integer>> iter = allSet.iterator();
  while (iter.hasNext()) {
   Map.Entry<String, Integer> me = iter.next();
   System.out.println(me.getKey() + " --> " + me.getValue());
  }
 }
}
 
在JDK1.5之后可以使用foreach输出全部的内容
package org.lxh.foreachdemo;

import java.util.HashMap;
import java.util.Map;

public class ForeachMapDemo {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		for (Map.Entry<String,Integer> me : map.entrySet()) {
			System.out.println(me.getKey() + " --> " + me.getValue());
		}
	}
}                                                                                                                                        
使用非系统类作为key值
ckage org.lxh.mapdemo;


public class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof Person)) {
			return false;
		}
		Person p = (Person) obj;
		if (this.name.equals(p.name) && this.age == p.age) {
			return true;
		} else {
			return false;
		}
	}

	public int hashCode() { // 这个方法的返回值都是通过一个公式计算的
		// 此时的公式:名字的hashCode * age
		return this.name.hashCode() * this.age;
	}

	public String toString() { // 覆写toString()
		return "姓名:" + this.name + ";年龄:" + this.age;
	}
}
package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapPersonDemo02 {
	public static void main(String[] args) {
		Map<Person, String> map = new HashMap<Person, String>();
		map.put(new Person("张三", 30), "zs");
		System.out.println(map.get(new Person("张三", 30)));
	}

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值