长沙android吧 关注:4贴子:15
  • 0回复贴,共1

java教程之Map应该怎么用

只看楼主收藏回复

java教程之Map应该怎么用
在自学或者看java教程的时候,大家多多少少都存在着这样或者那样的疑惑,对于这些中软国际小编一直也在整理,今天为大家献上的是关于Map应该怎样去用的一些方法,还是跟过去一样,在这里,小编提供的希望大家把它看成是思路,在技术的道路上还是需要不断的探索,自行研究才能最终体会到这门语言的伟大与迷人之处。
下面言归正传:
Map与Collection不同,Map中保存的是键值对,Key值不允许重复,而Collection中保存的是单个对象。Map接口中主要的方法有:
(1)V put(K key,V value)
该方法可以将key和value存到Map对象中。如果key已经存在,则被覆盖,返回被覆盖前的value。如果key不存在,则返回null。
(2)V get(Object key)
该方法可以根据key值返回对应的value。
(3)int size()
返回Map对象中键值对的数量。
(4)Set<K> keySet()
将Map对象中的key值取出,返回到Set对象中。
(5)Collection<V> values()
将Map对象中的value值取出,返回到Collection对象中。
Map是接口,无法直接实例化对象,所以要使用Map必须通过Map的实现类创建对象。下面介绍Map接口的4个主要实现类。
1)HashMap
HashMap是Map类的一个常用实现类,HashMap根据key值的hashCode和equals方法判断其是否唯一,与HashSet中保证元素唯一性的方式相同,请参考HashSet章节。如下代码所示:
package com.etc.chapter14;
import java.util.HashMap;
import java.util.Set;
public class TestHashMap {
publicstatic void main(String[] args) {
// TODO Auto-generated method stub
Player player1=newPlayer("110-999","Kate");
Player player2=newPlayer("110-888","Grace");
Team team1=new Team("China");
Team team2=new Team("USA");
HashMap<Player,Team> map=newHashMap<Player,Team>();
map.put(player1, team1);
map.put(player2, team2);
Set<Player> set=map.keySet();
for(Player p:set){
System.out.println(map.get(p).getName());
}}}
上述代码中,首先使用HashMap存储Player和Team之间的映射关系,使用put方法将两对键值对存储到了一个HashMap对象中。然后通过Map的keySet方法将Map的key值转换为一个Set对象,进一步使用增强for循环,根据key值迭代所有value值。运行结果如下:
China
USA
2)TreeMap
TreeMap是Map的一个实现类,不仅能保证Key值唯一,还能根据key值进行排序。TreeMap的key必须实现Comparable接口,实现compareTo方法。TreeMap根据compareTo的逻辑,对key进行排序。具体方式与TreeSet的排序逻辑相同,请参考TreeSet章节。
修改key值的类型Player类,实现Comparable接口,覆盖compareTo方法,如下代码所示:
package com.etc.chapter14;
public class Player implementsComparable<Player>{
privateString id;
privateString name;
//省略其他代码
public intcompareTo(Player arg0) {
// TODO Auto-generated method stub
return this.id.compareTo(arg0.id);
}}
上述代码中,Player类实现了Comparable接口,覆盖了compareTo方法,方法中根据Player的id值的字典顺序进行比较。使用下面代码测试:
package com.etc.chapter14;
public class TestTreeMap {
publicstatic void main(String[] args) {
Player player1=new Player("110-999","Kate");
Player player2=newPlayer("110-888","Grace");
Team team1=new Team("China");
Team team2=new Team("USA");
TreeMap<Player,Team> map=newTreeMap<Player,Team>();
map.put(player1, team1);
map.put(player2, team2);
Set<Player> set=map.keySet();
for(Player p:set){
System.out.println(map.get(p).getName());
}
}
}
上述代码中将两组键值对存储到了一个TreeMap中,运行结果为:
USA
China
因为Player类的compareTo方法根据Player的id属性的字典顺序进行排序,所以TreeMap<Player,Team>也根据Player的id属性的字典顺序排序。
3)Hashtable
Hashtable与Vector类似,也是一个“历史悠久”的类。Hashtable是JDK1.0版本中就存在的类。目前Hashtable实现了Map接口。Hashtable的功能可以完全被HashMap替代,主要区别在于Hashtable是同步对象,而HashMap不是同步的。
4)Properties
Properites类是Hashtable类的子类,所以也间接地实现了Map接口。在实际应用中,常使用Properties类对属性文件进行处理。该功能需要使用到IO包的API,IO相关知识点请参见IO章节。假设有如下属性文件db.properties:
username=root
password=123
可以使用Properties对象的load方法,将属性文件加载到Properties对象中,然后调用Properties对象的getProperty方法通过key值获得对应的value值。如下代码所示:
package com.etc.chapter14;
public class TestProperties {
public static void main(String[] args) {
Properties props=new Properties();
try {
props.load(new FileInputStream(newFile("db.properties")));
System.out.println(props.getProperty("username"));
System.out.println(props.getProperty("password"));
} catch (FileNotFoundException e) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}}}
运行结果如下:
root
123
Map接口的主要实现类有HashMap、TreeMap、Hashtable、Properties。Map中的key值不能重复,其中TreeMap的key值不仅不重复,而且能根据key值排序。Hashtable类可以完全被HashMap类替代,唯一区别在于Hashtable类是同步的。Properties类主要用于处理属性文件。
好了,这次的内容不知道大家看了以后有没有更加清晰明了一点呢,如果没有,点击官网看更多关于java教程的详细讲解吧。
java教程http://csetc.chinasofti.com/ java教程


IP属地:湖南1楼2016-01-07 16:59回复