集合框架之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语言基础——06.集合框架(2)泛型和Map集合

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

Java-集合框架Map之HashMap、TreeMap

Map接口Collection集合是存放单一元素的容器,在JDK中还有Map集合也是用来存放数据的容器,Map中存放的元素是键值对,称为key-value,其中key不能重复。 在Set集合中,它的...

Java集合框架总结(5)——Map接口的使用

Map用于保存具有映射关系的数据(key-vlaue)。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法...

黑马程序员——集合框架接口的分类:(分collection接口 和 map接口)

------- android培训、java培训、期待与您交流! ---------- collection接口有子接口List、Set。接口Set有SortedSet子接口; 接口M...

集合框架之Map

package andy.com.map; import java.util.HashMap; import java.util.Hashtable; import java.util.It...

【Java】Java集合框架源码和数据结构简要分析——Set和Map

哈希和红黑树的性能,已经Java 8中集合框架性能提高的优化

java基础:集合框架之Map(共性方法)

Map也是集合框架之一,我们首先来看看Map有哪几种,再说说它的共性方法。 Map的分类: (1)HashTable:底层是哈希表数据结构,不可以存入null键null值。该集合线程是同步的,jdk...

[学习笔记]Java集合框架之Map集合

Map集合 1. 概述 Map集合是一个接口,和Collection集合不同的是,它是双列集合,也就是说它所存储的是键值对。 2. 特点 Map集合存储的是键值对,其中键要...

集合框架,抽其核心,主要有三种:List、Set和Map

在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结...

集合框架 List,Set,Map和泛型

集合定义:Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象。作用:集合可以: 1、在类的内部,对数据进行组织; 2、简单而快速的搜索大数量的条目; 3、有的集合接口,提供...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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