`
k_lb
  • 浏览: 834081 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

Java Map 接口

 
阅读更多

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


张三 123456

李四 234567

王五 345678


HashMap、Hastable、TreeMap


Map 接口的常用方法如下所示:

No. 方法 类型 描述
1 V put(K key,V value) 普通 增加内容
2 V get(Object key) 普通 取得设置的内容,根据key取得
3 boolean containsKey(Object key) 普通 查找指定的key 是否存在
4 boolean containsValue(Object value) 普通 查找指定的value 是否存在
5 boolean isEmpty() 普通 判断集合是否为空
6 Set<K> keySet() 普通 将全部的key变为Set 集合
7 Collection<V> values() 普通 将全部的value 变为Collection集合
8 V remove(Object key) 普通 根据key 删除内容
9 void putAll(Map<? extends K,? extends V>m) 普通 增加一组数据


新的子类:HashMap


HashMap 是一个新的操作类,其本身可以直接为Map 接口进行实例化操作


package org.hashmapdemo;

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

public class HashMapDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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);
		
	}

}


package org.hashmapdemo;

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

public class HashMapDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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("zhangsan1");
		
		System.out.println(value);
		
	}

}


package org.hashmapdemo;

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

public class HashMapDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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> setall = map.keySet();
		Iterator<String> ite = setall.iterator();
		while (ite.hasNext()){
			System.out.println(ite.next());
		}
		
	}

}

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

package org.hashmapdemo;

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

public class HashMapDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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> setall = map.keySet();
		Iterator<String> ite = setall.iterator();
		while (ite.hasNext()){
			String str = ite.next();
			System.out.println(str + "-->"+map.get(str));
		}
		
	}

}


从运行结果可以发现,HashMap 本身也属于无序的一种操作

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


package org.hashmapdemo;

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

public class HashMapDemo02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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();
		Iterator<Integer> ite = col.iterator();
		 
		while(ite.hasNext()){
			Integer value = ite.next();
			System.out.println(value);
		}
	}

}


所有的操作与Collection 类似,只是多了一个key 而已


旧的子类:Hashtable


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


package org.hashmapdemo;

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

public class HashtableDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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);
	}

}


HashMap 与Hashtable 的区别


No 区别点 HashMap Hashtable
1 推出时间 是在JDK1.2之后推出的,属于新的类 是在JDK1.0时推出的,属于旧的操作类
2 操作 采用异步的处理操作 采用同步的处理操作
3 性能 性能高 性能相对较低
4 安全 非线程安全的操作 线程安全


按key 排序的子类:TreeMap


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


package org.hashmapdemo;

import java.util.Map;
import java.util.TreeMap;

public class TreeMapDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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);
		
		System.out.println(map);
	}

}

如果现在在给定任意的一个类,那么是否可以直接排序呢?类必须实现Comparable 接口


注意事项一:Map 不能直接使用Iterator输出


在集合的标准操作中所有的集合内容最好都使用Iterator 进行输出,但是在Map接口中并没有明确的定义出这样的操作。如果,没有的话,则就必须深入了解Map存储机制。

在Map 中虽然是以一对值的形式出现的,可是真正的保存的还是一个单独的对象,即:程序将key->value 的放在一个对象之中,之后将此对象加入到集合里

Map.Entry,Map实体,从定义格式上可以发现,此接口属于static 声明的接口,而且是一个内部接口。



对于 Map 和Map.Entry 的关系如图所示,如果要想输出则肯定依靠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.hashmapdemo;

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

public class HashMapDemo03 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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>> setmap = map.entrySet();
		Iterator<Map.Entry<String,Integer>> ite = setmap.iterator();
		
		while (ite.hasNext()){
			Map.Entry<String,Integer> myent = ite.next();
			System.out.println(myent.getKey()+"-->"+myent.getValue());
		}
	}

}


在JDK 1.5 之后也可以使用 foreach 输出全部的内容


package org.hashmapdemo;

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

public class foreachmap {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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> my:map.entrySet()){
			System.out.println(my.getKey()+"-->"+my.getValue());
		}
	}

}




注意事项二:使用非系统类作为key


现在建立一个Person 类,并在Map中设置多个对象。使用String 作为 key


package org.hashmapdemo;

public class Person {

	private String name;
	private int age;
	
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	public String toString(){
		return "姓名:"+this.name+" 年龄:"+this.age;
	}

}

在Map 中加入多个内容


package org.hashmapdemo;

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

public class HashMapDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String,Person> map = new HashMap<String,Person>();
		
		map.put("zf", new Person("张三",30));
		
		System.out.println(map);
	}

}

在Map 中可以使用匿名对象找到一个key 对应的value


package org.hashmapdemo;

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

public class HashMapDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String,Person> map = new HashMap<String,Person>();
		
		map.put("zf", new Person("张三",30));
		
		System.out.println(map.get("zf"));
		System.out.println(map.get(new String("zf")));
	}

}


如果现在反过来


package org.hashmapdemo;

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

public class HashMapDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String,Person> map = new HashMap<String,Person>();
		
		map.put("zf", new Person("张三",30));
		
		System.out.println(map.get(new Person("张三",30)));
	}

}

现在发现无法通过key 找到 value 了。实现equals()和hashCode()来区分是否是同一个对象


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


其他子类:使用非系统类作为key


默认情况下,一个Map集合中的key 是不能重复的,那么这种做法是Map 的标准做法,但是在集合中提供了一个非正常的操作子类:IdentityHashMap,通过此类加入的内容,如果对象的地址不相等,则认为不是同一个对象,可以重复加入。


package org.hashmapdemo;

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

public class IdentityHashMapDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Person,String> map = new IdentityHashMap<Person,String>();
		
		map.put(new Person("张三",30),"zf" );
		map.put(new Person("张三",30),"zf" );
		
		System.out.println(map);

	}

}

只有在两个对象执行 “==” 操作的时候不相等才会认为 不是同一个对象

分享到:
评论

相关推荐

    12.javaMap 接口及其实现类.zip

    12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类....

    13.javaMap接口的两个实现类:.zip

    13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.java...

    Java Map接口及其实现类原理解析

    Java Map接口及其实现类原理解析 Java Map接口是Java集合框架中的一种重要接口,它提供了键值对的存储和管理机制。Map接口的实现类有很多,包括HashMap、TreeMap、LinkedHashMap等,每种实现类都有其特点和使用场景...

    map(java).rar_ map ja_MAP JAVA_java map_java系统_map

    1. **Java Map接口**:理解`Map`接口的基本概念和常用方法,如`put()`, `get()`, `remove()`等,以及它的实现类,如`HashMap`、`TreeMap`等的区别和使用场景。 2. **Java Web开发**:涉及Servlet、JSP等技术,用于...

    java-遍历map

    ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`中不能包含重复的键:每个键最多只能映射到一个值。`Map`的主要实现类有`HashMap`、`...

    java map 实现缓存技术

    在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速访问和操作数据。在许多实际应用中,尤其是高性能和高并发的场景,Map常被用来实现缓存技术,以提高数据读取速度和系统...

    Java很好的学习笔记集合Map,学习代码

    Java是一种广泛使用的面向对象的编程语言,其集合框架是学习Java的重要部分,特别是Map接口,它是集合中的关键组件。Map接口在Java中用于存储键值对数据,它提供了丰富的功能来管理和操作这些数据。本篇笔记集合将...

    JavaMap.rar_arraylist map_collection_java map_javamap_地图 java

    在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...

    mapserver+java 配置及实例,网上项目报错已修改

    在Java环境中调用MapServer,通常会利用MapScript库来实现,这是一个允许编程语言与MapServer进行交互的接口。本实例主要探讨如何在Java项目中配置和使用MapServer,以及解决配置过程中遇到的问题。 首先,我们需要...

    Java Map 集合类简介

    本文将探讨Map接口及其主要实现,并讨论如何根据应用需求选择合适的Map类型。 **Map接口和方法** Map接口定义了四个主要的方法,所有Map实现都必须实现这些方法。其中,`equals(Object o)`和`hashCode()`方法用于...

    java Map 遍历方法

    在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key...

    java Pojo转Map

    Map接口则是Java集合框架的一部分,它提供了键值对的数据存储方式,方便数据的存取。将Pojo对象转换为Map,可以简化数据处理过程,尤其是在JSP页面上展示数据时,Map的灵活性更加突出。本文将详细介绍如何实现Java中...

    JAVA 数据处理笔记

    **二、JAVA Map接口** Map接口存储键值对,不保证元素的顺序,且不允许键重复。Map接口的方法包括put添加键值对、get获取值、remove移除键值对以及size返回键值对数量。常见的Map实现类有HashMap、TreeMap和...

    java xml和map互转

    在Java编程中,XML(可扩展标记语言)是一种用于存储和传输数据的标准化格式,而Map是Java集合框架中的一个重要接口,它提供了键值对的数据结构。将XML与Map进行互转是常见的需求,特别是在处理配置文件或者进行数据...

    Java程序设计.rar

    这个项目旨在帮助初学者理解Java的基本语法、控制结构以及类和对象的概念,同时涉及了"java map"这一标签所指代的Java集合框架中的Map接口。 1. **Java编程基础**: - **变量和数据类型**:Java支持基本数据类型如...

    Java Map 遍历比较齐全的解析.docx

    在Java编程中,`Map`接口是集合框架的一部分,它提供了键值对的存储功能。在处理`Map`对象时,我们经常需要遍历其中的所有元素。本篇将详细介绍Java中遍历`Map`的不同方法,以及如何获取`Map`的长度。 1. **遍历Map...

    List接口和Map接口

    ### List接口和Map接口详解 #### 一、Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,用于处理各种数据结构如列表、集合和映射等。该框架提供了一组统一的接口和实现,使开发人员能够高效地管理和...

    java中map的使用实例

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...

    易语言仿java集合 list map源码

    本主题聚焦于易语言中的面向对象编程,特别是模仿Java集合框架的List和Map接口的实现。这些数据结构在编程中扮演着核心角色,用于组织和管理数据。 首先,让我们深入了解易语言的面向对象编程概念。面向对象编程...

    Java基础学习22.pdf

    Java Map接口是Java集合框架的重要组成部分,它提供了一种存储键值对的数据结构。Map接口不保证元素的顺序,但提供了各种实现类来满足不同需求。以下是对Map接口及其常见子类的详细解释: 1. **Map接口概述** Map...

Global site tag (gtag.js) - Google Analytics