Java——(八)Map之LinkedHashMap、TreeMap、EnumMap实现类
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.LinkedHashMap实现类
LinkedHashMap需要维护意识的插入顺序,因此性能略低于HashMap的性能;但因为它以
链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能。下面示范了
LinkedHashMap的功能。
import java.util.LinkedHashMap; public class LinkedHashMapTest { public static void main(String[] args) { LinkedHashMap scores = new LinkedHashMap<>();
scores.put("语文", 80);
scores.put("数学", 82);
scores.put("英语", 76);
for (Object key : scores.keySet()) {
System.out.println(key + "--->" + scores.get(key));
}
} }
运行结果:
语文--->80
数学--->82
英语--->76
2.使用Properties读写属性文件
Properties类是Hashtable类的子类,该对象在处理文件属性时特别方便。Properties类可以把
Map对象和属性文件关联起来,从而可以把Map对象中的key—value对写入属性文件中,也可以把属
性文件的中的“属性名=属性值”加载到Map对象中。由于属性文件里的属性名、属性值只能是字符串类
型,所以Properties里的key、value都是字符串类型。该类型提供了如下三个方法来修改Properties
里的key、value值。
1)String getProperty(String key):获取Properties中指定属性名对应的属性值,类似于Map的
get(Object key)方法。
2)getProperty(String key, String defaultValue):该方法与前一个方法基本相似。该方法多一
个功能,如果Properties中不存在指定的key时,则该方法指定默认值。
3)Object setProperaty(String key, String value): 设置属性值,类似于Hashtable的put()方法。
此外,它还提供了两个读写Field文件的方法。
4)void load(InputStream inStream):从属性文件(以输入流表示)中加载key—value对,把加载
到的key—value对追加到Properties里。
5)void store(OutputStream out, String comments):将Properties中的key—value对输出到指定
的属性文件(以输出流表示)中。
下面程序示范了Properties类的用法。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties; public class PropertiesTest { public static void main(String[] args) throws FileNotFoundException, IOException { Properties props = new Properties();
//向Properties中添加属性
props.setProperty("uername", "暨雪");
props.setProperty("password", "123456");
//将Properties中的key—value对保存到a.ini文件中
props.store(new FileOutputStream("a.ini"), "comment line");
//新建一个Properties对象
Properties props2 = new Properties();
//向Properties中添加属性
props2.setProperty("age", "20");
//将a.ini文件中的key—value对追加到props2中
props2.load(new FileInputStream("a.ini"));
System.out.println(props2);
} }
运行结果:
{age=20, password=123456, uername=暨雪}
程序在当前路径下生成一个a.ini文件,该文件的内容如下:
#comment line
#Thu Jun 11 23:53:36 CST 2015
password=123456
uername=\u66A8\u96EA
3.TreeMap实现类
TreeMap就是一个红黑树数据结构,每个key—value即作为红黑树的一个节点。TreeMap存储
key—value对时,需要根据key对节点进行排序。TreeMap可以保证所有的key—value对处于有序
状态。TreeMap也有两种排序方式。类似TreeSet中判断元素相等的标准,TreeMap中判断两个key
相等的标准是:两个key通过compareTo()方法返回0,TreeMap即认为这两个key是相等的。重写
该类的equals()方法和compareTo()方法时应保持一致的返回结果:两个key通过equals()方法比较
返回true时,它们通过compareTo()方法比较应该返回0,否则TreeMap与Map接口的规则就会冲突。
以下提供了TreeMap根据key顺序来访问key—value对的方法。
1)Map.Entry firstEntry():返回该Map中最小key所对应的key—value对,如果该Map为空,则返回null。
2)Object firstKey():返回该Map中的最小key值,如果该Map为空,则返回null。
3)Map.Entry lastEntry():返回该Map中最大key值,如果该Map为空或不存在这样的key—value,则都返回null。
4)Object lastKey():返回该Map中的最大key值,如果该Map为空或不存在这样的key,则都返回null。
5)Map.Entry higherEntry(Object key):返回该Map中位于key后一位的key值(即大于指定key的最小key值)。
如果该Map为空,则都返回null。
6)Object higherKey(Object key):返回该Map中位于key后一位的key值(即大于指定key的最小key值)。
如果该Map为空或不存在这样的key,则都返回null。
7)Map.Entry lowerEntry(Object key):返回该Map中位于key前一位的key值(即小于指定key的最大key所对应
的key—value对)。如果该Map为空或不存在这样的key—value,则都返回null。
8)Object lowerEntry(Object key):返回该Map中位于key前一位的key值(即小于指定key的最大key值)。如果
该Map为空或不存在这样的key—value,则都返回null
9)NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive):
返回该Map的子Map,其key的范围是从fromKey(是否包括取决于第二个参数)到toKey(是否包括取决于第四个参数)。
10)SrotedMap subMap(Object fromKey, Object toKey):返回该Map的子Map,其key的范围是从fromKey(包括)
到toKey(不包括)。
11)SortedMap tailMap(Object fromKey):返回该Map的子Map,其key的范围是大于fromKey(包括)的所有key。
12)NavigableMap tailMap(Object fromKey, boolean inclsive):返回该Map的子Map,其key范围是大于fromKey
(是否包括取决于第二个参数)的所有key。
13)SortedMap headMap(Object toKey):返回该Map的子Map,其key范围是小于fromKey(不包括)的所有key。
14)NavigableMap headMap(Object toKey, boolean inclusive):返回该Map的子Map,其key范围是大于fromKey
(是否包括取决于第二个参数)的所有key。
下面程序示范了TreeMap的基本用法。(自然排序)
import java.util.TreeMap; class Rc implements Comparable {
int count; public Rc(int count) {
this.count = count;
} @Override
public String toString() { return "R[count:" + count + "]";
} @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj != null && obj.getClass() == Rc.class) {
Rc r = (Rc) obj;
return r.count == this.count;
}
return false;
} @Override
public int compareTo(Object o) { Rc r = (Rc) o;
return count > r.count ? 1 : count < r.count - 1 ? -1 : 0;
}
} public class TreeMapTest { public static void main(String[] args) { TreeMap tMap = new TreeMap<>();
tMap.put(new Rc(3), "黑马程序员");
tMap.put(new Rc(-5), "CSDN");
tMap.put(new Rc(9), "传智播客");
System.out.println(tMap);
//返回该TreeMap的第一个Entry对象
System.out.println(tMap.firstEntry());
//返回该TreeMap的最后一个key值
System.out.println(tMap.lastKey());
//返回该TreeMap的比new R(2)大的最小key值
System.out.println(tMap.higherKey(new Rc(2)));
//返回该TreeMap的比new R(2)小的最大的key—value对
System.out.println(tMap.higherEntry(new Rc(2)));
//返回该TreeMap的子TreeMap
System.out.println(tMap.subMap(new Rc(-1), new Rc(5)));
} }
运行结果:
{R[count:-5]=CSDN, R[count:3]=黑马程序员, R[count:9]=传智播客}
R[count:-5]=CSDN
R[count:9]
R[count:9]
R[count:9]=传智播客
{R[count:3]=黑马程序员}
4.EnumMap实现类
EnumMap是一个与枚举一起使用的Map实现,EnumMap中的所有key都必须是单个枚举类的枚举值。
EnumMap在内部以数组形式保存,所以这种实现形式非常紧凑、高效。EnumMap根据key的自然排序(
即枚举值在枚举类中定义顺序)来维护key—value对的顺序。
下面程序示范了EnumMap的用法。
import java.util.EnumMap; enum Season {
SPRING, SUMMER, FALL, WINRER
} public class EnumMapTest { public static void main(String[] args) { /* 创建一个EnumMap对象,该EnumMap的所有key必须是Season枚举类的枚举值 */
EnumMap enumMap = new EnumMap<>(Season.class);
enumMap.put(Season.SUMMER, "夏日炎炎");
enumMap.put(Season.SPRING, "春暖花开");
System.out.println(enumMap);
} }
运行结果:
{SPRING=春暖花开, SUMMER=夏日炎炎}
上面程序创建该EnumMap对象是指定它的key只能是Season枚举类的枚举值。如果该
EnumMap中添加两个key—value对后,这两个key—value对将会以Season枚举值的自然
顺序排序。
Java——(八)Map之LinkedHashMap、TreeMap、EnumMap实现类的更多相关文章
- 10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类
Map集合的功能概述 添加功能 * V put(K key,V value):添加元素. * 如果键是第一次存储,就直接存储元素,返回null * 如果键不 ...
- java中map和对象互转工具类的实现示例
在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...
- 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...
- Java中HashMap,LinkedHashMap,TreeMap的区别[转]
原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...
- map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别
前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...
- Java HashMap,LinkedHashMap,TreeMap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- HashMap,LinkedHashMap,TreeMap的区别(转)
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快 ...
- JAVA中map的分类和各自的特性
java为数据结构中的映射定义了一个接口java.util.Map,他实现了四个类,分别是:HashMap,HashTable,LinkedHashMapTreeMap Map不允许键重复,但允许值重 ...
- HashMap,LinkedHashMap,TreeMap之间的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap . Map 主要用于存储键( ...
随机推荐
- MyEclipse10
1.配置tomcat Windows->Preferences->My Eclipse->Servers->Tomcat,对于64位操作系统而言,Tomcat home dir ...
- javascript学习代码-判断闰年
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 用POLL的方式,没有跑出结果来,立此存照
咦,这些内容,和我以前看内核时的东东,对应起来了.. SELECT,POLL,EPOLL,非阻塞,异步之类的... 但我没有调出来.回家有空了可以看看,不用再敲打代码啦... #!/usr/bin/e ...
- Delphi版的完成端口控件
http://download.csdn.net/user/mike1234567890/uploads/2
- 查看SGA和PGA使用率
select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctus ...
- unity3d Human skin real time rendering plus 真实模拟人皮实时渲染 plus篇
最近逃课做游戏,逃的有几门都要停考了,呵呵呵,百忙之中不忘超炒冷饭,感觉之前的人皮效果还是不够好,又改进了一些东西 首先上图 放大看细节 显而易见的比上次的效果要好很多,此次我把模型用3dmax进行了 ...
- 《Principles of Mathematical Analysis》-chaper1-实数系与复数系
今天我们开始简单的介绍数学分析这门课程,参考教材是Walter Rudin著的<Principles of Mathematical Analysis> 对于一门新课你最开始可能会问的是: ...
- 前谷歌首席 Java 架构师谈如何设优秀的 API
随着近来软件规模的日益庞大,API编程接口的设计变的越来越重要.良好的接口设计可以降低系统各部分之间的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合度,从而提高系统的维护性和稳定性. Joshu ...
- java 运行项目不放到tomcat下的webapps文件夹下放到自己建的文件夹中的处理办法
你需要在tomcat跟目录下的conf/server.xml中进行配置,配置方法如下: <Context path="/Project" docBase="D:\s ...
- luajit 安装cjson
最近需要升级原有服务器的nginx加载逻辑,新的lua脚本需要解析一个远程返回的json格式的结果,原有的luajit并没有带cjson库,需要自己手动安装一下. 基本参考博客luajit安装cjso ...