您的位置:首页 > 编程语言 > Java开发

java Map

2016-06-15 12:05 295 查看

转载自http://blog.csdn.net/itlwc/article/details/10155669

Map层次结构






Map

[plain]
view plain
copy
print?

实现类  
    HashMap,LinkedHashMap,Hashtable  
子接口  
    SortedMap  
    实现类  
        TreeMap  
映射集,键值集合  
Map增加对象时,如果key值在Map已经存在,将会替换原先value值   
Map里面的key值是不能重复的,value值可以重复  
Map的泛型不可以是基本数据类型,比如Map<int,int>报错  

实现类
HashMap,LinkedHashMap,Hashtable
子接口
SortedMap
实现类
TreeMap
映射集,键值集合
Map增加对象时,如果key值在Map已经存在,将会替换原先value值
Map里面的key值是不能重复的,value值可以重复
Map的泛型不可以是基本数据类型,比如Map<int,int>报错

Map常用方法

[java]
view plain
copy
print?

package com.itlwc;  
  
import java.util.HashMap;  
import java.util.Map;  
  
public class Test {  
    public static void main(String[] args) {  
        Map map = new HashMap();  
        // 从此映射中移除所有映射关系  
        map.clear();  
        // 将指定的值与此映射中的指定键相关联  
        map.put("a", "lwc");  
        map.put("b", "nxj");  
        // 从指定映射中将所有映射关系复制到此映射中  
        map.putAll(new HashMap());  
        // 如果存在此键的映射关系,则将其从映射中移除  
        map.remove("b");  
        // 返回此映射中的键-值映射关系数  
        map.size();  
        // 如果此映射未包含键-值映射关系,则返回 true  
        map.isEmpty();  
        // 返回此映射中映射到指定键的值  
        map.get("a");  
        // 如果此映射包含指定键的映射关系,则返回 true  
        map.containsKey("a");  
        // 如果此映射为指定值映射一个或多个键,则返回 true  
        map.containsValue("nxj");  
        // 返回此映射中包含的映射关系的 set 视图  
        map.entrySet();  
        // 返回此映射中包含的键的 set 视图  
        map.keySet();  
        // 比较指定的对象与此映射是否相等  
        map.equals(new HashMap());  
        // 返回此映射的哈希码值  
        map.hashCode();  
        // 返回此映射中包含的值的 collection 视图  
        map.values();  
    }  
}  

package com.itlwc;

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

public class Test {
public static void main(String[] args) {
Map map = new HashMap();
// 从此映射中移除所有映射关系
map.clear();
// 将指定的值与此映射中的指定键相关联
map.put("a", "lwc");
map.put("b", "nxj");
// 从指定映射中将所有映射关系复制到此映射中
map.putAll(new HashMap());
// 如果存在此键的映射关系,则将其从映射中移除
map.remove("b");
// 返回此映射中的键-值映射关系数
map.size();
// 如果此映射未包含键-值映射关系,则返回 true
map.isEmpty();
// 返回此映射中映射到指定键的值
map.get("a");
// 如果此映射包含指定键的映射关系,则返回 true
map.containsKey("a");
// 如果此映射为指定值映射一个或多个键,则返回 true
map.containsValue("nxj");
// 返回此映射中包含的映射关系的 set 视图
map.entrySet();
// 返回此映射中包含的键的 set 视图
map.keySet();
// 比较指定的对象与此映射是否相等
map.equals(new HashMap());
// 返回此映射的哈希码值
map.hashCode();
// 返回此映射中包含的值的 collection 视图
map.values();
}
}

遍历Map 获取Map值的方法

[java]
view plain
copy
print?

package com.itlwc;  
  
import java.util.Collection;  
import java.util.HashMap;  
import java.util.Iterator;  
import java.util.Map;  
import java.util.Set;  
  
public class Test {  
    public static void main(String[] args) {  
        Map map = new HashMap();  
        map.put("a", "lwc");  
        map.put("b", "nxj");  
        // 方法一:  
        Set set = map.keySet();  
        Iterator ite1 = set.iterator();  
        while (ite1.hasNext()) {  
            String key = (String) ite1.next();  
            String value = (String) map.get(key);  
            System.out.println(key + ":" + value);  
        }  
        // 方法二:  
        Set<Map.Entry> set1 = map.entrySet();  
        Iterator<Map.Entry> ite2 = set1.iterator();  
        while (ite2.hasNext()) {  
            Map.Entry entry = (Map.Entry) ite2.next();  
            String key = (String) entry.getKey();  
            String value = (String) entry.getValue();  
            System.out.println(key + ":" + value);  
        }  
        // 获取map中所有值对象的Collection集合  
        Collection collection = map.values();  
        for (Object c : collection) {  
            String value = (String) c;  
            System.out.println("值为: " + value + ",长度为 " + value.length());  
        }  
    }  
}  
/* 
打印结果: 
    b:nxj 
    a:lwc 
    b:nxj 
    a:lwc 
    值为: nxj,长度为 3 
    值为: lwc,长度为 3 
*/  

package com.itlwc;

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

public class Test {
public static void main(String[] args) {
Map map = new HashMap();
map.put("a", "lwc");
map.put("b", "nxj");
// 方法一:
Set set = map.keySet();
Iterator ite1 = set.iterator();
while (ite1.hasNext()) {
String key = (String) ite1.next();
String value = (String) map.get(key);
System.out.println(key + ":" + value);
}
// 方法二:
Set<Map.Entry> set1 = map.entrySet();
Iterator<Map.Entry> ite2 = set1.iterator();
while (ite2.hasNext()) {
Map.Entry entry = (Map.Entry) ite2.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println(key + ":" + value);
}
// 获取map中所有值对象的Collection集合
Collection collection = map.values();
for (Object c : collection) {
String value = (String) c;
System.out.println("值为: " + value + ",长度为 " + value.length());
}
}
}
/*
打印结果:
b:nxj
a:lwc
b:nxj
a:lwc
值为: nxj,长度为 3
值为: lwc,长度为 3
*/

HashMap

[plain]
view plain
copy
print?

HashMap和ArrayList是一个时代的产物  
既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,  
    不保证键的存储顺序,HashMap允许键值为null,但只能出现一次  
构造方法  
    public HashMap()  
        初始容量为16  
    public HashMap(Map m)  

HashMap和ArrayList是一个时代的产物
既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
构造方法
public HashMap()
初始容量为16
public HashMap(Map m)

Hashtable

[plain]
view plain
copy
print?

HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,  
    同一时刻只能有一个线程访问,没有特殊需求不使用  
不允许null键的存在  
构造方法  
    public Hashtable()  
        初始容量为11  
    public Hashtable(Map m)  

HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
同一时刻只能有一个线程访问,没有特殊需求不使用
不允许null键的存在
构造方法
public Hashtable()
初始容量为11
public Hashtable(Map m)

Properties

[plain]
view plain
copy
print?

HashTable的一个子类,开发中经常使用    
Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)    
一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值  

HashTable的一个子类,开发中经常使用
Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)
一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值
案例

[java]
view plain
copy
print?

package com.itlwc;  
  
import java.util.Iterator;  
import java.util.Properties;  
import java.util.Set;  
  
public class Test {  
    public static void main(String[] args) {  
        Properties p = new Properties();  
        p.setProperty("1", "a");  
        p.setProperty("2", "b");  
        p.setProperty("3", "c");  
        Set<Object> set = p.keySet();  
        Iterator<Object> ite = set.iterator();  
        while (ite.hasNext()) {  
            String key = (String) ite.next();  
            String value = p.getProperty(key);  
            System.out.println(key + "=" + value);  
        }  
    }  
}  
/*  
打印结果:  
    3=c 
    2=b 
    1=a 
*/   

package com.itlwc;

import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class Test {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("1", "a");
p.setProperty("2", "b");
p.setProperty("3", "c");
Set<Object> set = p.keySet();
Iterator<Object> ite = set.iterator();
while (ite.hasNext()) {
String key = (String) ite.next();
String value = p.getProperty(key);
System.out.println(key + "=" + value);
}
}
}
/*
打印结果:
3=c
2=b
1=a
*/

LinkedHashMap

[plain]
view plain
copy
print?

LinkedHashMap是Ordered,采用双链表实现的    
有固定顺序,也就是插入顺序    
构造方法    
    public LinkedHashMap()   
        初始容量为16  
    public LinkedHashMap(int initialCapacity)    
    public LinkedHashMap(Map m)  

LinkedHashMap是Ordered,采用双链表实现的
有固定顺序,也就是插入顺序
构造方法
public LinkedHashMap()
初始容量为16
public LinkedHashMap(int initialCapacity)
public LinkedHashMap(Map m)

SortedMap接口

[plain]
view plain
copy
print?

保证按照键的升序排列的映射,天然顺序  

保证按照键的升序排列的映射,天然顺序

SortedMap常用方法 

[plain]
view plain
copy
print?

Object firstKey()    
    返回有序映射中当前第一个(最小的)键  
Object lastKey()    
    返回有序映射中当前最后一个(最大的)键  
SortedMap headSet(Object toKey)    
    返回此有序映射的部分视图,其键值严格小于toKey   
SortedMap tailSet(Object fromKey)    
    返回此有序映射的部分视图,其键大于或等于fromKey  
SortedMap subSet(Object fromKey,Object toKey)    
    返回此有序映射的部分视图,其键值从fromKey(包括)到toKey(不包括)  
Comparator comparator()  
    返回与此有序映射关联的比较器,如果使用键的自然顺序,则返回null  

Object firstKey()
返回有序映射中当前第一个(最小的)键
Object lastKey()
返回有序映射中当前最后一个(最大的)键
SortedMap headSet(Object toKey)
返回此有序映射的部分视图,其键值严格小于toKey
SortedMap tailSet(Object fromKey)
返回此有序映射的部分视图,其键大于或等于fromKey
SortedMap subSet(Object fromKey,Object toKey)
返回此有序映射的部分视图,其键值从fromKey(包括)到toKey(不包括)
Comparator comparator()
返回与此有序映射关联的比较器,如果使用键的自然顺序,则返回null

TreeMap

[plain]
view plain
copy
print?

TreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历    
构造方法    
    public TreeMap()    
    public TreeMap(SortedMap s)      
    public TreeMap(Map m)  
    public TreeMap(Comparator c)  
       c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器  
因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则  

TreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
构造方法
public TreeMap()
public TreeMap(SortedMap s)
public TreeMap(Map m)
public TreeMap(Comparator c)
c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则

TreeMap排序规则Comparator案例

[java]
view plain
copy
print?

package com.itlwc;  
  
import java.util.Comparator;  
import java.util.Iterator;  
import java.util.Set;  
import java.util.TreeMap;  
  
public class Test {  
    public static void main(String[] args) {  
        TreeMap map = new TreeMap(new PersonComparator());  
        map.put(new Person("lwc", 80), "1");  
        map.put(new Person("nxj", 70), "3");  
        map.put(new Person("lp", 60), "2");  
        map.put(new Person("fy", 75), "4");  
        Set set = map.keySet();  
        Iterator ite = set.iterator();  
        while (ite.hasNext()) {  
            Person key = (Person) ite.next();  
            String value = (String) map.get(key);  
            System.out.println("编号:" + value + "\t姓名:" + key.name + "\t分数为:"  
                    + key.score);  
        }  
    }  
}  
  
class Person {  
    String name;  
    int score;  
  
    public Person(String name, int score) {  
        this.name = name;  
        this.score = score;  
    }  
}  
  
class PersonComparator implements Comparator {  
    public int compare(Object o1, Object o2) {  
        Person p1 = (Person) o1;  
        Person p2 = (Person) o2;  
        return p1.score - p2.score;  
    }  
}  
/* 
打印结果: 
    编号:2    姓名:lp   分数为:60 
    编号:3    姓名:nxj  分数为:70 
    编号:4    姓名:fy   分数为:75 
    编号:1    姓名:lwc  分数为:80 
*/  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: