Java集合Map接口与Map.Entry学习

Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。

  (1) 添加、删除操作:
  Object put(Object key, Object value): 将互相关联的一个关键字与一个值放入该映像。如果该关键字已经存在,那么与此关键字相关的新值将取代旧值。方法返回关键字的旧值,如果关键字原先并不存在,则返回null
  Object remove(Object key): 从映像中删除与key相关的映射
  void putAll(Map t): 将来自特定映像的所有元素添加给该映像
  void clear(): 从映像中删除所有映射
  “键和值都可以为null。但是,您不能把Map作为一个键或值添加给自身。”
  (2) 查询操作:
  Object get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对象,如果没有在该映像中找到该关键字,则返回null
  boolean containsKey(Object key): 判断映像中是否存在关键字key
  boolean containsValue(Object value): 判断映像中是否存在值value
  int size(): 返回当前映像中映射的数量
  boolean isEmpty() :判断映像中是否有任何映射
  (3) 视图操作 :处理映像中键/值对组
  Set keySet(): 返回映像中所有关键字的视图集
  “因为映射中键的集合必须是唯一的,您用Set支持。你还可以从视图中删除元素,同时,关键字和它相关的值将从源映像中被删除,但是你不能添加任何元素。”
  Collection values():返回映像中所有值的视图集
  “因为映射中值的集合不是唯一的,您用Collection支持。你还可以从视图中删除元素,同时,值和它的关键字将从源映像中被删除,但是你不能添加任何元素。”
  Set entrySet(): 返回Map.Entry对象的视图集,即映像中的关键字/值对
  “因为映射是唯一的,您用Set支持。你还可以从视图中删除元素,同时,这些元素将从源映像中被删除,但是你不能添加任何元素。”
  Map.Entry接口
  Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。

  通过这个集合的迭代器,您可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。
  (1) Object getKey(): 返回条目的关键字
  (2) Object getValue(): 返回条目的值
  (3) Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值

例子:java代码

Map<String,Integer> map=new HashMap<String,Integer>();   

map.put("1", 1);   

map.put("2", 2);   

map.put("3", 3);   

map.put("3", 3);       

Iterator itor=map.entrySet().iterator();   

while(itor.hasNext()){   

  Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next();   

  System.out.println("key="+entry.getKey().toString());   

  System.out.println("values="+entry.getValue().toString());   

  






关于Map.Entry
你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用Map.Entry类,你可以得到在同一时间得到所有的信息。标准的Map访问方法如下:

Set keys = map.keySet( );if(keys != null) {Iterator iterator = keys.iterator( );while(iterator.hasNext( )) {Object key = iterator.next( );Object value = map.get(key);;....;}} 

然后,这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。

幸运的是,这里有一个更加简单的途径。Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下:

Set entries = map.entrySet( );if(entries != null) {Iterator iterator = entries.iterator( );while(iterator.hasNext( )) {Map.Entry entry =iterator.next( );Object key = entry.getKey( );Object value = entry.getValue();;....}} 

尽管增加了一行代码,我们却省略了许多对Map不必要的“get”调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。
将引入的hashtable.entrySet进行排序,并返回

Hashtable内部排列的方式是散列排布,所以当输出信息时会是无序的。为了能保证输出的数据按照顺序排列,不要渴望用java自带的函数来对Hashtable对象进行调整处理。当我们获取Hashtable里的KEY和VALUE时,一般都运行了Map.Entry类来转换,好,现在就用这个类来作文章,我具体写了一个方法。

代码:

/**
  * 方法名称:getSortedHashtable
  * 参数:Hashtable h 引入被处理的散列表 
  * 描述:将引入的hashtable.entrySet进行排序,并返回
  */
 public static Map.Entry[] getSortedHashtable(Hashtable h){

Set set = h.entrySet();
  
  Map.Entry[] entries = (Map.Entry[])set.toArray(new Map.Entry[set.size()]);
   
  Arrays.sort(entries,new Comparator(){

public int compare(Object arg0, Object arg1) {
    Object key1 = ((Map.Entry)arg0).getKey();
    Object key2 = ((Map.Entry)arg1).getKey();
    return ((Comparable)key1).compareTo(key2);
   }
   
  });
  
  return entries;
 }

调用这个方法:

Map.Entry[] set = getSortedHashtable(t);
    
  //perportyTable
  for (int i=0;i<set.length;i++){

System.out.println(set[i].getKey().toString());
   
    System.out.println(set[i].getValue().toString());

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值