`

13、java.util.Map集合

阅读更多

一、Map映射

 

/**
 *java.util.Map<K,V>
 *K - 此映射所维护的键的类型
 *V - 映射值的类型
 *将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
 *Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
 *映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。
 *某些映射实现可明确保证其顺序,如 TreeMap 类;
 *另一些映射实现则不保证顺序,如 HashMap 类。
 */
public interface Map<K,V>
{
	/**
	 *
	 *内部接口,映射项(键-值对)。
	 *映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类
	 *获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。
	 *
	 */
	public static interface Map.Entry<K,V>
	{
		//返回与此项对应的键。
		K getKey();
		
		//返回与此项对应的值。
		V getValue();

		//用指定的值替换与此项对应的值(可选操作)。
		V setValue(V value);

		//比较指定对象与此项的相等性。
		boolean equals(Object o);

		//返回此映射项的哈希码值。
		int hashCode();
	}

	//返回此映射中的键-值映射关系数。
	int size();

	//如果此映射未包含键-值映射关系,则返回 true。
    boolean isEmpty();

	//如果此映射包含指定键的映射关系,则返回 true。
    boolean containsKey(Object key);

	//如果此映射将一个或多个键映射到指定值,则返回 true
    boolean containsValue(Object value);

    //返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
    V get(Object key);

    //将指定的值与此映射中的指定键关联(可选操作)。
	//如果添加时,键相同,那么后添加的值会覆盖原有键对应值,并put方法返回被覆盖的值
    V put(K key, V value);

	//如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
    V remove(Object key);

	//从指定映射中将所有映射关系复制到此映射中(可选操作)。
    void putAll(Map<? extends K, ? extends V> m);

	//从此映射中移除所有映射关系(可选操作)。
    void clear();

	//返回此映射中包含的键的 Set 视图。
    Set<K> keySet();

    //返回此映射中包含的值的 Collection 视图。
    Collection<V> values();

    //返回此映射中包含的映射关系的 Set 视图。
    Set<Map.Entry<K, V>> entrySet();

    //比较指定的对象与此映射是否相等
    boolean equals(Object o);

	//返回此映射的哈希码值。
    int hashCode();
}

 

二、Map体系

 

Map

   |--Hashtable<K,V>:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的,jdk1.0,效率低

   |--HashMap<K,V>:底层是哈希表数据结构,允许null键和null值,该集合是不同步的,jdk1.2,效率高

   |--TreeMap<K,V>:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序

 

三、HashMap集合

 

/**
 *基于哈希表的 Map 接口的实现。
 *此实现提供所有可选的映射操作,并允许使用 null 值和 null 键
 *除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同
 *此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
  *为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
 */
public class HashMap<K,V>extends AbstractMap<K,V>
	implements Map<K,V>, Cloneable, Serializable
{
	//构造方法*********************

	//构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
	public HashMap(){}

	//构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
	public HashMap(int initialCapacity){}

	//构造一个带指定初始容量和加载因子的空 HashMap。
	public HashMap(int initialCapacity,float loadFactor){}

	//构造一个映射关系与指定 Map 相同的新 HashMap。
	//所创建的 HashMap 具有默认加载因子 (0.75) 和足以容纳指定 Map 中映射关系的初始容量。
	public HashMap(Map<? extends K,? extends V> m){}

	//常用方法与Map一致
}

 

四、TreeMap集合

 

/**
 *基于红黑树(Red-Black tree)的 NavigableMap 实现
 *该映射根据其键的自然顺序进行排序
 *或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法
 *不同步
 */
public class TreeMap<K,V>extends AbstractMap<K,V>
	implements NavigableMap<K,V>, Cloneable, Serializable
{
	//构造方法*********************

	//使用键的自然顺序构造一个新的、空的树映射。插入该映射的所有键都必须实现 Comparable 接口
	public TreeMap(){}

	//构造一个新的、空的树映射,该映射根据给定比较器进行排序
	public TreeMap(Comparator<? super K> comparator){}

	//构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序
	public TreeMap(Map<? extends K,? extends V> m){}

	//常用方法与Map一致
}

 

五、Map集合取出元素的两种方式

 

    原理:将map集合转成set集合,再通过迭代器取出

 

 1,Set<K> keySet:返回此映射中包含的键的 Set 视图,将Map中所有的键存入到Set集合,因为set具备迭代器,所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值

import java.util.*;

class MapDemo 
{
	public static void main(String[] args) 
	{
		HashMap<String,String> hm = new HashMap<String,String>();
		hm.put("01","zhangsan");
		hm.put("02","lisi");
		hm.put("03","wangwu");
		hm.put("04","zhaoliu");
		Set<String> set=hm.keySet();
		Iterator<String> it = set.iterator();
		while(it.hasNext())
		{
			String key = it.next();
			String value = hm.get(key);
			System.out.println(key+":"+value);
		}
	}
}

 

2,Set<Map.Entry<k,v>> entrySet():将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry

import java.util.*;

class MapDemo 
{
	public static void main(String[] args) 
	{
		HashMap<String,String> hm = new HashMap<String,String>();
		hm.put("01","zhangsan");
		hm.put("02","lisi");
		hm.put("03","wangwu");
		hm.put("04","zhaoliu");
		Set<Map.Entry<String,String>> set=hm.entrySet();
		Iterator<Map.Entry<String,String>> it = set.iterator();
		while(it.hasNext())
		{
			Map.Entry<String,String> entry = it.next();
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+":"+value);
		}
	}
}

 

六、使用集合的技巧

 

  1. 看到Array就是数组结构,有角标,查询速度很快。
  2. 看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();
  3. 看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。
  4. 看到tree就是二叉树,就要想到排序,就想要用到比较。
  5. 比较的两种方式:
  6. 一个是Comparable:覆盖compareTo方法;
  7. 一个是Comparator:覆盖compare方法。
  8. LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。

七、集合什么时候用?

 

  • 当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。
  • 保证唯一,就用Set。不保证唯一,就用List。
分享到:
评论

相关推荐

    java.util 包 是Java中很大的一个集合

    运用下列类进行JAVA编程: Date Calendar Random 使用 Collection 接口及其实现类 ArrayList LinkedList 使用 HashMap 使用Vector 等方法的使用

    在JSTL EL中处理java.util.Map,及嵌套List的情况

    在EL中,方括号运算符用来检索数组和集合的元素。对于实现 java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。

    JAVA Map集合类源码说明

    java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。 List 适用...

    java中map集合的用法.doc

    本文档主要讲述的是java中map集合的用法;Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map...

    java中map集合的用法

    java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。 List 适用...

    set.list.map接口

    import java.util.Map; import java.util.Set; import java.util.TreeMap; public class NewMap { public static void main(String[] args) { //向map里添加键值对 //如果要对键进行排序Map map=new TreeMap();...

    java集合知识-map、set等

    import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; public class HashSetTest { public static void main(String[] args) { HashSet hs = new LinkedHashSet(); hs....

    Java Map 集合类简介

    java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List ...

    Java基础知识点总结.docx

    把map集合转成set的方法 82 使用集合的技巧 83 Collections--集合工具类 83 Arrays—数组对象工具类 84 增强for循环 85 可变参数(...) 86 枚举:关键字 enum 86 自动拆装箱 86 泛型 87 &lt;java.lang&gt;System 89 &lt;java...

    trove:Trove 3库的修补版本-更改Collections语义以匹配适当的java.util.Map语义

    更改Collections语义以匹配适当的java.util.Map语义Palantir Technologies已对该库进行了修补,以进行以下更改: 分支由Palantir Gotham 3.12.x使用: Trove的一系列装饰器的实现,这些装饰器包装了其自定义集合并...

    jsp中关于EL表达式的应用

    1.pageScope:所有页面作用域变量的集合(java.util.Map) 2.requestSCope:所有请求作用域变量的集合(java.util.Map) 3.sessionScope:所有会话作用域变量的集合(java.util.Map) 4.applicationScope:...

    Java高级程序设计:第7章-集合框架.pptx

    java.util包中定义了各种用于集合操作的类和接口,这些类和接口构成了Java语言的集合框架(Collection Framework)。 Java集合中可以放对象,不能存放基础数据类型数。 Collection Framework 根据不同类型的集合的特点...

    JAVA–集合

    集合按照其存储结构可以分为两大类,单列集合java.util.Collection、双列集合java.util.Map 一、Collection Collection集合框架的体系 Collection常用功能 1.public boolean add(E e):把给定的对象添加到集合中 2....

    Map接口整合

    java.util.map接口,Java集合框架,hashmap、LinkedHashMap

    java编程宝典

    4.1 如何将一个java.util.Date转成一个java.sql.Date 31 4.2 如何将一个String转成一个java.util.Date 31 4.3 如何将一个java.util.Date格式成一个String 31 4.4 如何使用jdk8的新特性LocalDate和LocalDateTime 31 ...

    Java基础 — 13 Map集合

    ** Map集合** 定义: 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象...

    LargeCollections

    LargeCollections 支持由 LevelDB 支持的 java.util.Map、java.util.List 和 java.util.Set 实现。 这允许您的集合增长得非常大,因为它不使用 JVM 堆内存。 应该浏览此项目的以获取更多信息。 #关键设计原则# ...

    Java Collection集合的简单介绍与运用

    集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map,这里主要记录一下Collection集合。 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个...

    JAVA核心知识点整理.zip

    集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 Collection:Collection 是集合 List、Set、Queue 的最基本的接口。 Iterator:迭代器,可以通过迭代器遍历集合中的...

Global site tag (gtag.js) - Google Analytics