集合框架之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)));
	}

}




                

常用JAVA集合框架(Collection、List、Set、Map)

1.常用集合框架结构 2. List   2.1 ArrayList List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List ...
  • sdauzxl
  • sdauzxl
  • 2016年07月29日 20:17
  • 1990

Java集合框架之Map实例解析

1、Map概述1.1 什么是Map Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以键集(keySet())...
  • qq_28261343
  • qq_28261343
  • 2016年09月22日 23:42
  • 2574

JDK 1.8集合框架 Map、Set、List、Queue、Stack比较

JDK 1.8集合框架基本架构图 比较 组件 比较 Map 1、Map是键值对,使用哈希映射,键不能重复,值可以重复。 2、TreeMap可以排列顺序,HashM...
  • qq_34707744
  • qq_34707744
  • 2018年01月22日 17:19
  • 29

Java集合框架——Map

MapMap与Collection的不同 Map与Collection在集合框架中属并列存在 Map存储的是键值对 Map存储元素使用put方法,Collection使用add方法 Map集合没有直接...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2017年01月07日 23:35
  • 413

集合框架中的list、set和map的浅析

最近开始接触集合框架,简单的使用了list、set、map的部分功能,在这里发表一下个人见解。 list是有序且重复的,list中的数据都是按照写入的顺序排列的,存入list的数据用add方法写入,...
  • W_K_J
  • W_K_J
  • 2014年12月13日 00:26
  • 662

Java集合框架:TreeMap

  TreeMap继承AbstractMap,实现NavigableMap、Cloneable、Serializable三个接口。其中AbstractMap表明TreeMap为一个...
  • u013256816
  • u013256816
  • 2016年03月17日 19:38
  • 2366

JAVA常用集合框架用法详解基础篇四之Map接口

下面举几个例子主要是引出集合类的: 1、8,4,5,6,7,55,7,8  像这样的类型相同的可以使用数组来存储,本例可以用int[] arr来存储。 2、”zhnagsan”,true,68 像这样...
  • LULEI1217
  • LULEI1217
  • 2015年04月21日 10:43
  • 1285

集合框架顶层Collection接口的常见方法(集合共性功能)

  • dingjingchao
  • dingjingchao
  • 2016年11月15日 14:50
  • 581

集合框架之map接口

map接口的常用方法: entrySet() 返回此映射中包含的映射关系的 Set 视图hashmap的常见操作 hashmap的CRUD // HashMap hashMap=new Hash...
  • sinat_34814635
  • sinat_34814635
  • 2016年09月29日 15:20
  • 73

Java集合框架之Map

1      Map集合N016 1.1    Map接口 【 •    实现Map接口的集合类用来存储"键-值"映射对。 •    JDK API中Map接口的实现类常用的有 –  Has...
  • JourneyX
  • JourneyX
  • 2016年10月28日 10:12
  • 415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:集合框架之map
举报原因:
原因补充:

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