Java Map 集合实现类

Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据。Map的key不允许重复。key与value是单向的一一对应关系,即通过key值总能找到唯一确定的value。

1 Map常用方法

  • void clear():清除Map集合里的所有元素
  • boolean containsKey(Object key):查询Map是否包含指定的key,包含则返回true
  • Set entrySet():返回Map中包含key-value对所组成的Set集合,每个集合元素都是Map.Entry对象
  • Object get(Object key):返回指定key所对应的value,如果此Map不包含此key,返回null
  • Set keySet():返回该Map中所有key组成的Set集合
  • Object put(Object key, Object value):添加一个key-value对,如果key已经存在,则会覆盖
  • void putAll(Map m):将指定的Map集合复制到本Map
  • Object remove(Object key):删除指定key对应的key-value对
  • int size():返回Map元素的个数
  • Collection values():返回Map里所有value组成的Collection

  

  2 HashMap 与Hashtable

HashMap与Hashtable都是Map接口的实现类,它们之间的关系类似与ArrayList与Vector:Hashtable是一个古老的Map实现类,从JDK1.0就有了,从它的命名就可以看出,甚至没有遵循Java命名规范。

  • Hashtable是线程安全的,HashMap不是,所以HashMap性能要好些
  • Hashtable不允许使用null作为key与value,HashMap可以,但是也只能存储一个null作为key值
  • HashMap是无序的

  

 1
 2         HashMap<String, String> hash = new HashMap<String, String>();
 3         hash.put("吴国谋士", "周瑜");
 4         hash.put("蜀国军师", "诸葛亮");
 5         hash.put("魏国谋士", "郭嘉");
 6
 7         //foreach遍历
 8         for(Object key:hash.keySet())
 9         {
10             String name = hash.get(key);
11             System.out.println(key+"-->"+name);
12         }
13
14         //Iterator遍历
15         Iterator iter = hash.keySet().iterator();
16         while(iter.hasNext())
17         {
18             String key = (String)iter.next();
19             String name = hash.get(key);
20             System.out.println(key+"-->"+name);
21         }
22
23         //将HashMap转为Set,Set里存储的是Map.Entry<K, V>
24         Set set = hash.entrySet();
25         Iterator iter1 = set.iterator();
26
27         while(iter1.hasNext())
28         {
29             Map.Entry<String, String> item = (Map.Entry<String, String>)iter1.next();
30             System.out.print(item.getKey()+"-->"+item.getValue()+"  ");
31         }

HashMap中存储、获取对象,其中用作key的对象必须实现hashCode方法与equals方法,类似与HashSet,HashMap判断两个key值相等的标准也是:两个key 通过equals()比较返回true,那么两个key的hashCode值也相等。相对key的判断,value的判断就要简单些,两个value只需要通过equals()比较返回true即可。

关于HashSet,HashMap的equals()与hashCode()重写详见:

3 LinkedHashMap

LinkedHashMap是HashMap的子类,类似于LinkedHashSet,也是使用双向链表来维护key-value对的次序(其实只需要考虑key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value插入顺序一致。LinkedHashMap可以避免对HashMap里的key-value对进行排序,同时又可避免使用TreeMap所增加的成本。由于它需要维护元素的插入顺序,因此性能略低于HashMap,但是因为它以链表来维护内部顺序,所以在迭代访问Map里的全部元素时有较好的性能。

 1
 2         LinkedHashMap map = new LinkedHashMap();
 3         map.put("Lakers", "KOBE");
 4         map.put("Celtics", "Irving");
 5         map.put("Warries", "KD");
 6         map.put("Cavaliers", "James");
 7
 8         Iterator iter= map.keySet().iterator();
 9         while(iter.hasNext())
10         {
11             String key = (String)iter.next();
12             System.out.println(key+"-->"+map.get(key));
13
14         }
15
16         for(Object key:map.keySet())
17         {
18             System.out.println(key+"-->"+map.get(key));
19         }
20         

  输出结果:

Lakers-->KOBE
Celtics-->Irving
Warries-->KD
Cavaliers-->James

可以看到LinkedHashMap遍历的顺序是插入时的顺序,与HashMap截然不同,HashMap遍历的结果是无序的。

  

  4 TreeMap

TreeMap与TreeSet类似,也是一个红黑树结构。每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。TreeMap可以保证所有key-value对处于有序状态。TreeMap额外提供了一系列根据key值访问key-value的方法

Map.Entry() firstEntry():返回该Map中最小key所对应的key-value对,如果该Map为空,则返回null

Map.Entry() lastEntry():返回该Map中最大key所对应的key-value对,如果该Map为空,则返回null

Object firstKey():返回该Map中最小的key值

Object lastKey():返回该Map中最大的key值

原文地址:https://www.cnblogs.com/Latiny/p/8353696.html

时间: 2024-10-10 08:21:27

Java Map 集合实现类的相关文章

黑马程序员——java——Map集合的子类HashMap的简单操作方法

Map集合的子类HashMap的简单操作方法 import java.util.HashMap; import java.util.Iterator; public class HashMapDemos { public static void%r0main(String[] args) { // HashMap<Studenti,String> hm = new HashMap<Studenti,String>(); hm.put(new Studenti("kk&qu

java map集合的知识

/** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * HashMap最多只允许一条记录的键为null,允许多条记录的值为null. * HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致. * 如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使Has

java Collections集合工具类

/* Collections是Collection的工具类. 工具类中其中两个比较常用的方法就是: 1,sort(list) . sort(list,自定义比较器) 2,max(list) . max(list,自定义比较器) 3,binarySearch(list,key) //利用折半查找的方法找到list中key元素的索引,存在则返回索引,不存在则返回-(插入点)-1 */ import java.util.*; class CollectionsDemo { public static

Java map的匿名类的初始化

可以直接使用: Map<String, Object> testMap = new HashMap<String, Object>() { { put("test1", "test11");  put("test2", "test11"); }}; 进行初始化. 在网上查了下,这个是使用了匿名类的方式来进行初始化.第一层{}是匿名类的定义,第二层{}是初始化函数的定义. 但是没有想通的是 也就是说这应是

Java Map集合利用比较器Comparator根据Key和Value的排序

TreeMap排序 根据Key进行排序 Map的根据key排序需要用到TreeMap对象,因为它是默认按照升序进行输出的,可以使用比较器compareTo对它进行降序排序,Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于.等于或者大于o2分别返回负整数.0或者正整数,若是按照升序可以直接省略比较器代码Map<String, String> treeMap = new

Java学习笔记之:Java Map集合

一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重复 * 当再次使用相同的key进行保存数据会覆盖之前的key所对应的value值 * * hashMap:底层是哈希表,key符合哈希表特性 * Treemap:底层是二叉树 * @author HuTiger * */ public class MapStudy { public static v

java基础 Map集合

集合 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下 Collection接口是集合的根接口,没有蹄冻这个接口的直接实现类,但是却又其让其被继承的长   生的两个接口就是set与list .Set中不能包含重复的元素.List是一个有序的集合 List 有序  可重复的 List里存放的对象是有序的,同时也是可以重复的,list 关注的是索引,拥有一系列和索引相关的方法,查询速度快 因为是会伴随这后面数据的移动,所有插入删除数据速度慢 Set 无序 不能重复 Set是无序的

字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类

package hjp.smart4j.framework.util; import org.apache.commons.lang3.StringUtils; /** * 字符串工具类 */ public final class StringUtil { /** * 字符串分隔符 */ public static final String SEPARATOR=String.valueOf((char)29); /** * 判断字符串是否为空 */ public static boolean i

Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现

(一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和算法实现细节,只需要用这些类创建一些对象,然后直接应用就可以了,这样就大大提高了编程效率. (二)集合框架包含的内容: (三)集合框架的接口(规范)   Collection接口:存储一组不唯一,无序的对象 List接口:存储一组不唯一,有序的对象 Set接口:存储一组唯一,无序的对象 Map接口: