`
QI程序猿
  • 浏览: 17762 次
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java Map总结

 
阅读更多

Map是一个由键值对组成的数据结构,且在每个集合中键是唯一的。

 

为测试以下功能,开始一个具有JUnit测试功能的类

 

import org.junit.Test;

public class MapTest {

	private Map<String, Object> map = new HashMap<String, Object>();

	public MapTest() {
		map.put("userName", "admin");
		map.put("password", "123456");
		map.put("age", 11);
	}
}

 

 

 0、将Map转化为List类型

 

在Java中Map提供了三种集合的获取方式:key set , value set , key-value set.它们都可以通过构造方法或者addAll(Collection<? extends E> c)方法来转化为List类型。

 

@Test
	public void map2list() {

		List<String> keyList = new ArrayList<String>(map.keySet());
		for (String key : keyList) {
			System.out.print("[" + key + "]");
		}

		System.out.println();
		List<Object> valueList = new ArrayList<Object>(map.values());
		for (Object value : valueList) {
			System.out.print("[" + value + "]");
		}

		System.out.println();
		List<Entry<String, Object>> entryList = new ArrayList<Entry<String, Object>>(
				map.entrySet());
		for (Entry<String, Object> entry : entryList) {
			System.out.print("[" + entry + "]");
		}
	}

 

 运行结果:

 

[age][userName][password]
[11][admin][123456]
[age=11][userName=admin][password=123456]

 

1、遍历Map集合

 

通过几种最常用的方法进行遍历

 

@Test
	public void circleMap() {
		for (Entry<String, Object> entry : map.entrySet()) {
			System.out.print("[" + entry.getKey() + "," + entry.getValue()
					+ "]");
		}

		System.out.println();
		Iterator<String> iterator = map.keySet().iterator();
		while (iterator.hasNext()) {
			String key = iterator.next();
			System.out.print("[" + key + "," + map.get(key) + "]");
		}

		System.out.println();
		Set<String> keySet = map.keySet();
		for (String key : keySet) {
			System.out.print("[" + key + "," + map.get(key) + "]");
		}
	}

 

运行结果:

 

[age,11][userName,admin][password,123456]
[age,11][userName,admin][password,123456]
[age,11][userName,admin][password,123456]

 

 2、根据Key来对Map排序

 

@Test
	public void compareByKey() {
		List<Entry<String, Object>> list = new ArrayList<Entry<String, Object>>(
				map.entrySet());
		Collections.sort(list, new Comparator<Entry<String, Object>>() {
			@Override
			public int compare(Entry<String, Object> e1,
					Entry<String, Object> e2) {
				return e1.getKey().compareTo(e2.getKey());
			}

		});
		for (Entry<String, Object> entry : list) {
			System.out.print("[" + entry.getKey() + "," + entry.getValue()
					+ "]");
		}

		System.out.println();
		SortedMap<String, Object> sortedMap = new TreeMap<String, Object>(
				new Comparator<String>() {

					@Override
					public int compare(String k1, String k2) {
						return k1.compareTo(k2);
					}
				});
		sortedMap.putAll(map);
		Iterator<String> iterator = sortedMap.keySet().iterator();
		while (iterator.hasNext()) {
			String key = iterator.next();
			System.out.print("[" + key + "," + sortedMap.get(key) + "]");
		}
	}

 

运行结果:

 

[age,11][password,123456][userName,admin]
[age,11][password,123456][userName,admin]

 

3、根据Value来对Map进行排序

 

由于初始化Map对象中的Value值有不同的类型,所以在比较过程中做了一些处理,全部转为String类型比较。

 

@Test
	public void compareByValue() {
		List<Entry<String, Object>> list = new ArrayList<Entry<String, Object>>(
				map.entrySet());
		Collections.sort(list, new Comparator<Entry<String, Object>>() {
			@Override
			public int compare(Entry<String, Object> e1,
					Entry<String, Object> e2) {
				String value1 = "", value2 = "";
				if (e1.getValue() instanceof Integer) {
					value1 = Integer.toString((Integer) e1.getValue());
				} else {
					value1 = (String) e1.getValue();
				}
				if (e2.getValue() instanceof Integer) {
					value2 = Integer.toString((Integer) e2.getValue());
				} else {
					value2 = (String) e2.getValue();
				}
				return value1.compareTo(value2);
			}

		});
		for (Entry<String, Object> entry : list) {
			System.out.print("[" + entry.getKey() + "," + entry.getValue()
					+ "]");
		}
	}

 

运行结果:

 

[age,11][password,123456][userName,admin]

 

4、初始化一个static的常量map

 

有两种方式声明一个全局静态的Map,且都是线程安全的。

 

在MapStaticFinalstst.java中,第一种方式声明的可以在任何地方修改map里面的值

 

 

package com.code.map;

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

public class MapStaticFinalstst {

	private static final Map<Object, Object> map;
	static {
		map = new HashMap<Object, Object>();
		map.put("1", "st");
		map.put("2", "nd");
	}

	public static void main(String[] args) {
		map.put("3", "rd");
		for (Entry<Object, Object> entry : map.entrySet()) {
			System.out.print("[" + entry.getKey() + "," + entry.getValue()
					+ "]");
		}
	}
}

 

运行结果:

 

 

[3,rd][2,nd][1,st]

 

在MapStaticFinalstnd.java中,unmodifiableMap返回指定映射的不可修改视图,当我们尝试修改map数据时,会发生异常。

 

 

package com.code.map;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class MapStaticFinalstnd {

	private static final Map<Object, Object> map;
	static {
		Map<Object, Object> aMap = new HashMap<Object, Object>();
		aMap.put("1", "st");
		aMap.put("2", "nd");
		map = Collections.unmodifiableMap(aMap);
	}

	public static void main(String[] args) {
		map.put("3", "rd");
		for (Entry<Object, Object> entry : map.entrySet()) {
			System.out.print("[" + entry.getKey() + "," + entry.getValue()
					+ "]");
		}
	}
}

 

运行结果:

 

 

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableMap.put(Unknown Source)
	at com.code.map.MapStaticFinalstnd.main(MapStaticFinalstnd.java:19)

 

分享到:
评论

相关推荐

    java xml和map互转

    总结,使用DOM4J库,我们可以方便地在Java中实现XML与Map之间的互转。这不仅适用于简单的键值对,还支持嵌套结构、属性以及有无根节点的情况。在实际项目中,可以根据具体需求对这些方法进行适当的调整和优化。

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

    总结来说,`EasyXmlUtil`是一个实用的Java工具类,它封装了XML与Map之间的相互转换功能,使得开发者能方便快捷地处理这两种数据格式。通过理解和使用此类,可以提高开发效率,简化数据处理的复杂性。在项目中,只需...

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

    总结,Java中遍历`Map`主要有四种方式,其中通过`Map.entrySet()`进行遍历通常被认为效率较高,尤其在`Map`容量较大的情况下。而在Java 8之后,我们可以利用Lambda表达式简化遍历操作。获取`Map`的长度直接调用`size...

    java中map的使用实例

    总结来说,选择哪种Map取决于你的需求:HashMap适合快速查找且不需要特定顺序;LinkedHashMap适合需要保持插入顺序或者访问顺序的场景;而TreeMap则适用于需要有序遍历的情况。理解并正确使用这些Map类可以帮助你...

    Java Map 按值排序

    总结来说,Java提供了多种方式来对Map按值进行排序,包括使用TreeMap、Collections.sort、Stream API以及Guava库。选择哪种方法取决于项目需求和个人喜好,但在Java 8及更高版本中,Stream API通常被认为是最简洁和...

    java 技术总结.--java 技术

    Java集合框架是存储和管理对象的重要工具,包括List、Set、Map等接口以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些容器允许我们高效地组织和操作数据。 五、输入/输出(I/O)与网络编程 Java的I/O库...

    将Map转换成Java实体

    总结起来,将Map转换为Java实体对象是Java开发中常见的需求,我们可以利用Core Java JDK 1.8的泛型和反射来实现这一功能。通过创建一个通用的工具类,我们可以简化代码并提高代码复用性。在使用过程中,需要注意处理...

    java集合MAP三种遍历

    在Java编程语言中,`Map`接口是一种非常重要的数据结构,它存储键值对,并确保每个键都是唯一的。本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ###...

    java遍历Map对象的说有数据

    ### Java遍历Map对象的所有数据 在Java编程中,`Map`接口是Java集合框架中的一个关键组成部分,它用于存储键值对。本篇文章将详细解释如何遍历`Map`对象的所有数据,并介绍几种常见的遍历方法。我们将重点讨论通过`...

    java基础总结资料

    8. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现这些接口的类(如ArrayList、LinkedList、HashSet、HashMap)。它们为存储和操作对象提供了强大支持。 9. **IO流**:Java的IO流处理能力强大,...

    java中Map的两种遍历方法

    在Java编程语言中,`Map`接口是集合框架的一个重要组成部分,它用于存储键值对。其中,`HashMap`是`Map`接口的一个实现类,提供了基于哈希表的存储方式,具有较快的访问速度。在处理数据时,我们经常需要遍历`Map`中...

    【java】mapstruct自定义类的转换示例(csdn)————程序.pdf

    总结起来,这个Java MapStruct自定义转换示例展示了以下关键知识点: 1. **MapStruct**:一个用于对象之间属性映射的代码生成库,可以减少手动编写转换代码的工作。 2. **@Mapping注解**:定义对象属性之间的转换...

    Java 对象属性map排序示例

    总结来说,Java中对Map进行排序通常涉及到HashMap与TreeMap的选择,以及Comparator的使用。对于对象属性Map的排序,需要先对Map进行排序,然后可能还要对对象列表进行排序。通过理解这些概念,开发者能够灵活地控制...

    Java课程总结.pdf

    - Collection:Java的集合框架包括`Set`、`List`、`Map`等接口,用于存储和管理对象集合。 - 迭代器:`Iterator`用于遍历集合中的元素,而`ListIterator`提供双向遍历列表的能力。 - 集合类的实现:如`ArrayList`...

    Java操作Redis,实现String、List、Map的set和get

    总结,通过使用Java的Jedis库,我们可以轻松地实现对Redis的String、List和Map的操作。通过封装和单元测试,可以提高代码的可维护性和可靠性。在实际项目中,还可以考虑使用更高级的客户端如Lettuce,以及Spring ...

    美国的邮政编码 全部 java map

    总结来说,这个程序利用Java的Map数据结构有效地管理和检索美国的邮政编码信息。通过使用HashMap,可以实现快速的查找和插入操作。文件"postcodes_us.txt"提供原始数据,程序需要读取并解析这些数据,将它们转化为...

    Java Map 通过 key 或者 value 过滤的实例代码

    Java Map 通过 key 或者 value 过滤的实例代码 Java Map 是一种常用的数据结构,用于存储键值对数据。在实际开发中,我们经常需要对 Map 中的数据进行过滤,以满足特定的业务需求。今天,我们将讨论如何使用 Java ...

    java基础总结文档

    【Java基础总结】 Java是一种广泛使用的面向对象的编程语言,具有丰富的类库和强大的功能。以下是对Java基础知识的总结,适合长时间未接触Java的人快速查阅,同时也非常适合初学者学习。 ### Eclipse相关 Eclipse...

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    在Java编程中,Map接口是用于存储键值对的数据结构,而Java提供了多种Map的实现,包括TreeMap、HashMap和ConcurrentSkipListMap。本文主要比较了这三种Map的性能,尤其是在插入和查找操作上的效率。 1. **TreeMap**...

Global site tag (gtag.js) - Google Analytics