集合框架之map

原创 2012年03月21日 18:46:00


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)));
	}

}




                    

12.集合框架--Collection、List、Set、Map集合

1.概述           集合是一种容器,用于存储对象 2.特点          长度可变          集合中不可以存储基本数据类型值...
  • TonyMor
  • TonyMor
  • 2017年12月08日 11:30
  • 22

黑马程序员_java_集合框架_Collection_List_Set_Map_泛型

 ------- http://www.itheima.com" target="blank">android培训、http://www.itheima.com" target="blank">...

Java集合框架官方教程(4):Set/List/Map/Queue/Deque实现

Lesson: Implementations     Implementations are the data objects used to store collections, w...

Java面向对象——集合框架(Map)

面向对象 Map集合:该集合存储键值对。一对一往里存,而且要保证键的唯一性。 无返回值 clear()           从此映射中移除所有映射关系(可选操作)。 布尔型 c...

黑马程序员——Java语言基础——06.集合框架(2)泛型和Map集合

------- android培训、java培训、期待与您交流! ---------- 本节考点: 一、泛型限定,上限下限什么时候用 二、map和Collection的不同 三、Map两种...

java源码分析之集合框架Map 07

Map  概览:

《Java源码解析》集合框架Map之LinkedHashMap

2016-12-24 16:01 以前都没有贴出来运行环境,今天加上OS和JDK版本,因为发现不同版本实现源码有些许差别: OS : MacOS 10.11 JDK: jdk1....

集合框架(二)--Map集合

Map集合 该集合存储键值对,一对一对的存储,而且要保证键的唯一性。 1.添加            put(K key,V  value):将值存入对应的键,如果原来的键对应有值,那么会存入新...

Java集合框架List,Map,Set等全面介绍

Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。   Java集合框架的基本接口/类层次结构: ja...
  • weiqubo
  • weiqubo
  • 2013年07月18日 10:37
  • 1060
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:集合框架之map
举报原因:
原因补充:

(最多只允许输入30个字)