`

Java Map

    博客分类:
  • Java
阅读更多

关键技术:

  • HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
  • Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。
  • LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢
  • TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

 

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package book.arrayset;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * 演示各个Map的实现类
 
*/
public class TestMap {
    
    
/**
     * 初始化一个Map
     * 
@param map
     
*/
    
public static void init(Map map){
        
if (map != null){
            String key 
= null;
            
for (int i=5; i>0; i--){
                key 
= new Integer(i).toString() + ".0";
                map.put(key, key.toString());
                
//Map中的键是不重复的,如果插入两个键值一样的记录,
                
//那么后插入的记录会覆盖先插入的记录
                map.put(key, key.toString() + "0");            }
        }
    }
    
/**
     * 输出一个Map
     * 
@param map
     
*/
    
public static void output(Map map){
        
if (map != null){
            Object key 
= null;
            Object value 
= null;
            
//使用迭代器遍历Map的键,根据键取值
            Iterator it = map.keySet().iterator();
            
while (it.hasNext()){
                key 
= it.next();
                value 
= map.get(key);
                System.out.println(
"key: " + key + "; value: " + value );
            }
            
//或者使用迭代器遍历Map的记录Map.Entry
            Map.Entry entry = null;
            it 
= map.entrySet().iterator();
            
while (it.hasNext()){
                
//一个Map.Entry代表一条记录
                entry = (Map.Entry)it.next();
                
//通过entry可以获得记录的键和值
                
//System.out.println("key: " + entry.getKey() + "; value: " + entry.getValue());
            }
        }
    }
    
/**
     * 判断map是否包含某个键
     * 
@param map
     * 
@param key
     * 
@return
     
*/
    
public static boolean containsKey(Map map, Object key){
        
if (map != null){
            
return map.containsKey(key);
        }
        
return false;
    }
    
/**
     * 判断map是否包含某个值
     * 
@param map
     * 
@param value
     * 
@return
     
*/
    
public static boolean containsValue(Map map, Object value){
        
if (map != null){
            
return map.containsValue(value);
        }
        
return false;
    }
    
/**
     * 演示HashMap
     
*/
    
public static void testHashMap(){
        Map myMap 
= new HashMap();
        init(myMap);
        
//HashMap的键可以为null
        myMap.put(null,"ddd");
        
//HashMap的值可以为null
        myMap.put("aaa"null);
        output(myMap);
    }
    
/**
     * 演示Hashtable
     
*/
    
public static void testHashtable(){
        Map myMap 
= new Hashtable();
        init(myMap);
        
//Hashtable的键不能为null
        
//myMap.put(null,"ddd");
        
//Hashtable的值不能为null
        
//myMap.put("aaa", null);
        output(myMap);
    }
    
/**
     * 演示LinkedHashMap
     
*/
    
public static void testLinkedHashMap(){
        Map myMap 
= new LinkedHashMap();
        init(myMap);
        
//LinkedHashMap的键可以为null
        myMap.put(null,"ddd");
        
//LinkedHashMap的值可以为null
        myMap.put("aaa"null);
        output(myMap);
    }
    
/**
     * 演示TreeMap
     
*/
    
public static void testTreeMap(){
        Map myMap 
= new TreeMap();
        init(myMap);
        
//TreeMap的键不能为null
        
//myMap.put(null,"ddd");
        
//TreeMap的值不能为null
        
//myMap.put("aaa", null);
        output(myMap);
    }

    
public static void main(String[] args) {
        System.out.println(
"采用HashMap");
        TestMap.testHashMap();
        System.out.println(
"采用Hashtable");
        TestMap.testHashtable();
        System.out.println(
"采用LinkedHashMap");
        TestMap.testLinkedHashMap();
        System.out.println(
"采用TreeMap");
        TestMap.testTreeMap();
        
        Map myMap 
= new HashMap();
        TestMap.init(myMap);
        System.out.println(
"新初始化一个Map: myMap");
        TestMap.output(myMap);
        
//清空Map
        myMap.clear();
        System.out.println(
"将myMap clear后,myMap空了么?  " + myMap.isEmpty());
        TestMap.output(myMap);
        myMap.put(
"aaa""aaaa");
        myMap.put(
"bbb""bbbb");
        
//判断Map是否包含某键或者某值
        System.out.println("myMap包含键aaa?  "+ TestMap.containsKey(myMap, "aaa"));
        System.out.println(
"myMap包含值aaaa?  "+ TestMap.containsValue(myMap, "aaaa"));
        
//根据键删除Map中的记录
        myMap.remove("aaa");
        System.out.println(
"删除键aaa后,myMap包含键aaa?  "+ TestMap.containsKey(myMap, "aaa"));
        
//获取Map的记录数
        System.out.println("myMap包含的记录数:  " + myMap.size());
    }
    
/**
     * Map用于存储键值对,不允许键重复,值可以重复。
     * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
     * HashMap最多只允许一条记录的键为null,允许多条记录的值为null。
     * HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。
     * 如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
     * (2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;
     * 它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
     * (3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。
     * 在遍历的时候会比HashMap慢。
     * (4)TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,
     * 得到的记录是排过序的。
     
*/
}



分享到:
评论

相关推荐

    java map 实现缓存技术

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

    java Map 遍历方法

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

    Java Map按键排序和按值排序

    Java Map按键排序和按值排序 Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键...

    Java Map 集合类简介

    【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...

    java Map 转为 Obj Obj 转为 Map

    java Map 转为 Obj Obj 转为 Map

    JavaMap.rar_arraylist map_collection_java map_javamap_地图 java

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

    java Map

    是java Map中几种常用的遍历方法,适合于新手,谢谢

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

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

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

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

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

    标题中的"map(java).rar_ map ja_MAP JAVA_java map_java系统_map"暗示了这是一个与Java编程语言相关的项目,特别是涉及到地图(Map)的实现。在Java中,`Map`是一个接口,它定义了键值对的数据结构,允许我们通过键...

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

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

    java map转实体

    java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...

    java Map转换成bean,利用java反射以及java和bean包

    总之,Java Map到Bean的转换是通过反射和JavaBeans规范实现的,这是Java开发中常用的一种数据转换技巧。理解并熟练运用这些知识,能够帮助我们更高效地处理各种数据结构,提升代码的灵活性。在实际项目中,可以根据...

    java一键xml转map,一键map转xml工具类

    在Java编程中,XML(可扩展标记语言)和Map(映射)是两种常见的数据存储和交换格式。XML因其结构化和易于解析的特性,在数据交换和配置文件中广泛使用,而Map则作为Java中存储键值对的高效数据结构。在实际开发中,...

    Java Map 按值排序

    在Java编程语言中,Map接口提供了键值对的存储方式,但默认情况下,Map并不会按照特定的顺序来存储或返回元素。然而,在某些场景下,我们可能需要将Map中的元素按照值(value)进行排序。本文将详细介绍如何在Java中...

    java Map遍历方法

    在Java编程语言中,`Map`接口是集合框架的一个重要组成部分,它提供了键值对(key-value pairs)的存储和访问。这篇博文主要探讨了如何遍历Java中的`Map`对象,下面将详细介绍几种常见的遍历`Map`的方法。 1. **...

    java循环Map java迭代Map

    Map a = new HashMap(); //方法一 Iterator it = a.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); System.out.println(pairs.getValue()); } //以下方法需要jdk5以上...

    java map 集合 排序

    在Java编程语言中,Map集合是一个非常重要的数据结构,它存储键值对,其中每个键都是唯一的。然而,Map默认不保证元素的顺序,如果需要按照特定规则进行排序,我们需要用到特定类型的Map或者手动排序。本文将深入...

    Java Map 遍历实例与效率比较

    主要提供java中的map的遍历实例及效率比较

    美国的邮政编码 全部 java map

    在这个场景中,我们有一个关于美国邮政编码的Java程序,它利用Map数据结构来高效地管理这些信息。本文将深入探讨这个程序背后的技术细节。 首先,让我们关注标题“美国的邮政编码 全部 java map”。这表明该程序的...

Global site tag (gtag.js) - Google Analytics