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

java map

2016-02-27 08:46 381 查看
http://blog.csdn.net/itlwc/article/details/10155669

Java - Map

2013-08-21 17:26 967人阅读 评论(1) 收藏 举报


分类:

JavaSE(30)


版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

Map层次结构






Map

[plain] view plain copy

实现类

HashMap,LinkedHashMap,Hashtable

子接口

SortedMap

实现类

TreeMap

映射集,键值集合

Map增加对象时,如果key值在Map已经存在,将会替换原先value值

Map里面的key值是不能重复的,value值可以重复

Map的泛型不可以是基本数据类型,比如Map<int,int>报错

Map常用方法

[java] view plain copy

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

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

HashMap和ArrayList是一个时代的产物

既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,

不保证键的存储顺序,HashMap允许键值为null,但只能出现一次

构造方法

public HashMap()

初始容量为16

public HashMap(Map m)

Hashtable

[plain] view plain copy

HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,

同一时刻只能有一个线程访问,没有特殊需求不使用

不允许null键的存在

构造方法

public Hashtable()

初始容量为11

public Hashtable(Map m)

Properties

[plain] view plain copy

HashTable的一个子类,开发中经常使用

Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)

一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值

案例

[java] view plain copy

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

LinkedHashMap是Ordered,采用双链表实现的

有固定顺序,也就是插入顺序

构造方法

public LinkedHashMap()

初始容量为16

public LinkedHashMap(int initialCapacity)

public LinkedHashMap(Map m)

SortedMap接口

[plain] view plain copy

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

SortedMap常用方法

[plain] view plain copy

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

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: