java map
2016-02-27 08:46
381 查看
http://blog.csdn.net/itlwc/article/details/10155669
分类:
JavaSE(30)
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
实现类
HashMap,LinkedHashMap,Hashtable
子接口
SortedMap
实现类
TreeMap
映射集,键值集合
Map增加对象时,如果key值在Map已经存在,将会替换原先value值
Map里面的key值是不能重复的,value值可以重复
Map的泛型不可以是基本数据类型,比如Map<int,int>报错
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.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和ArrayList是一个时代的产物
既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
构造方法
public HashMap()
初始容量为16
public HashMap(Map m)
HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
同一时刻只能有一个线程访问,没有特殊需求不使用
不允许null键的存在
构造方法
public Hashtable()
初始容量为11
public Hashtable(Map m)
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是Ordered,采用双链表实现的
有固定顺序,也就是插入顺序
构造方法
public LinkedHashMap()
初始容量为16
public LinkedHashMap(int initialCapacity)
public LinkedHashMap(Map m)
保证按照键的升序排列的映射,天然顺序
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是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
构造方法
public TreeMap()
public TreeMap(SortedMap s)
public TreeMap(Map m)
public TreeMap(Comparator c)
c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则
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
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 copypackage 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 copypackage 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 copyHashMap和ArrayList是一个时代的产物
既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
构造方法
public HashMap()
初始容量为16
public HashMap(Map m)
Hashtable
[plain] view plain copyHashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
同一时刻只能有一个线程访问,没有特殊需求不使用
不允许null键的存在
构造方法
public Hashtable()
初始容量为11
public Hashtable(Map m)
Properties
[plain] view plain copyHashTable的一个子类,开发中经常使用
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 copyLinkedHashMap是Ordered,采用双链表实现的
有固定顺序,也就是插入顺序
构造方法
public LinkedHashMap()
初始容量为16
public LinkedHashMap(int initialCapacity)
public LinkedHashMap(Map m)
SortedMap接口
[plain] view plain copy保证按照键的升序排列的映射,天然顺序
SortedMap常用方法
[plain] view plain copyObject 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 copyTreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
构造方法
public TreeMap()
public TreeMap(SortedMap s)
public TreeMap(Map m)
public TreeMap(Comparator c)
c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则
TreeMap排序规则Comparator案例
[java] view plain copypackage 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
相关文章推荐
- javase
- 深入理解OOP-java版本
- Java - Collection
- 详解配置java环境变量那点事儿
- JAVA 一个简单的图形界面计算器
- java 利用*号打印三角形
- Spring AOP学习笔记(2):AOP前置通知&后置通知
- Spring AOP学习笔记(1):AOP基础知识
- Java8使用lambda表达式进行集合的遍历
- Java反射机制:方法反射的基本操作
- 矩阵乘法java代码实现
- 面向对象
- javamail 关于SSL的问题找了我一个星期之久
- JavaMail发送和接收邮件
- 观察者模式学习--使用jdk的工具类简单实现
- java项目命名规范
- Jfinal进阶系列之初体验
- java JDK8 学习笔记——第16章 整合数据库
- spring【6】(事物创建代理 BeanNameAutoProxyCreator)
- Cannot change version ...Module to 3.0 解决