使用Maps

Map(接口) 维持“键-值”对应关系(对),以便通过一个键查找相应的值
HashMap* 基于一个散列表实现(用它代替Hashtable)。针对“键-值”对的插入和检索,这种形式具有最稳定的性能。可通过构建器对这一性能进行调整,以便设置散列表的“能力”和“装载因子”
ArrayMap 由一个ArrayList后推得到的Map。对反复的顺序提供了精确的控制。面向非常小的Map设计,特别是那些需要经常创建和删除的。对于非常小的Map,创建和反复所付出的代价要比HashMap低得多。但在Map变大以后,性能也会相应地大幅度降低
TreeMap 在一个“红-黑”树的基础上实现。查看键或者“键-值”对时,它们会按固定的顺序排列(取决于Comparable或Comparator,稍后即会讲到)。TreeMap最大的好处就是我们得到的是已排好序的结果。TreeMap是含有subMap()方法的唯一一种Map,利用它可以返回树的一部分。


Map (interface)
 


Maintains key-value associations (pairs), so you can look up a value using a key.
 


HashMap*
 


Implementation based on a hash table. (Use this instead of Hashtable.) Provides constant-time performance for inserting and locating pairs. Performance can be adjusted via constructors that allow you to set the capacity and load factor of the hash table.
 


TreeMap
 


Implementation based on a red-black tree. When you view the keys or the pairs, they will be in sorted order (determined by Comparable or Comparator, discussed later). The point of a TreeMap is that you get the results in sorted order. TreeMap is the only Map with the subMap() method, which allows you to return a portion of the tree.
 

下例包含了两套测试数据以及一个fill()方法,利用该方法可以用任何两维数组(由Object构成)填充任何Map。这些工具也会在其他Map例子中用到。
 

//: Map1.java
// Things you can do with Maps
package c08.newcollections;
import java.util.*;

public class Map1 {
  public final static String[][] testData1 = {
    { "Happy", "Cheerful disposition" },
    { "Sleepy", "Prefers dark, quiet places" },
    { "Grumpy", "Needs to work on attitude" },
    { "Doc", "Fantasizes about advanced degree"},
    { "Dopey", "'A' for effort" },
    { "Sneezy", "Struggles with allergies" },
    { "Bashful", "Needs self-esteem workshop"},
  };
  public final static String[][] testData2 = {
    { "Belligerent", "Disruptive influence" },
    { "Lazy", "Motivational problems" },
    { "Comatose", "Excellent behavior" }
  };
  public static Map fill(Map m, Object[][] o) {
    for(int i = 0; i < o.length; i++)
      m.put(o[i][0], o[i][1]);
    return m;
  }
  // Producing a Set of the keys:
  public static void printKeys(Map m) {
    System.out.print("Size = " + m.size() +", ");
    System.out.print("Keys: ");
    Collection1.print(m.keySet());
  }
  // Producing a Collection of the values:
  public static void printValues(Map m) {
    System.out.print("Values: ");
    Collection1.print(m.values());
  }
  // Iterating through Map.Entry objects (pairs):
  public static void print(Map m) {
    Collection entries = m.entries();
    Iterator it = entries.iterator();
    while(it.hasNext()) {
      Map.Entry e = (Map.Entry)it.next();
      System.out.println("Key = " + e.getKey() +
        ", Value = " + e.getValue());
    }
  }
  public static void test(Map m) {
    fill(m, testData1);
    // Map has 'Set' behavior for keys:
    fill(m, testData1);
    printKeys(m);
    printValues(m);
    print(m);
    String key = testData1[4][0];
    String value = testData1[4][1];
    System.out.println("m.containsKey(\"" + key +
      "\"): " + m.containsKey(key));
    System.out.println("m.get(\"" + key + "\"): "
      + m.get(key));
    System.out.println("m.containsValue(\""
      + value + "\"): " +
      m.containsValue(value));
    Map m2 = fill(new TreeMap(), testData2);
    m.putAll(m2);
    printKeys(m);
    m.remove(testData2[0][0]);
    printKeys(m);
    m.clear();
    System.out.println("m.isEmpty(): "
      + m.isEmpty());
    fill(m, testData1);
    // Operations on the Set change the Map:
    m.keySet().removeAll(m.keySet());
    System.out.println("m.isEmpty(): "
      + m.isEmpty());
  }
  public static void main(String args[]) {
    System.out.println("Testing HashMap");
    test(new HashMap());
    System.out.println("Testing TreeMap");
    test(new TreeMap());
  }
} ///:~

printKeys(),printValues()以及print()方法并不只是有用的工具,它们也清楚地揭示了一个Map的Collection“景象”的产生过程。keySet()方法会产生一个Set,它由Map中的键后推得来。在这儿,它只被当作一个Collection对待。values()也得到了类似的对待,它的作用是产生一个List,其中包含了Map中的所有值(注意键必须是独一无二的,而值可以有重复)。由于这些Collection是由Map后推得到的,所以一个Collection中的任何改变都会在相应的Map中反映出来。
print()方法的作用是收集由entries产生的Iterator(反复器),并用它同时打印出每个“键-值”对的键和值。程序剩余的部分提供了每种Map操作的简单示例,并对每种类型的Map进行了测试。
当创建自己的类,将其作为Map中的一个键使用时,必须注意到和以前的Set相同的问题。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索map
, collection
, system
, public
, treemap
, 一个
, arraywalk和arraymap
, keyset
, ArrayMap
, ArrayMap源码
map方法
oruxmaps使用教程、citymaps2go使用教程、oruxmaps使用教程视频、google sky maps使用、mapsme使用技巧,以便于您获取更多的相关知识。

时间: 2024-10-08 14:05:50

使用Maps的相关文章

Bing Maps实现地理位置的定位

问题描述 Bing Maps实现地理位置的定位 一个电商平台,要根据用户的地理位置不同来显示不同的价格.h5可以实现获取经度和纬度,但是如何把经纬度变成地址信息. 编程语言:C# 地理范围是全球.请问如何实现 解决方案 http://blog.csdn.net/jcx5083761/article/details/40112631 解决方案二: 地理位置定位

Google AdSense for Maps地图广告

地图应用是一项热门的网络服务,很多本地信息类网站,比如旅游,房屋租赁,餐饮信息等,都是使用Google Maps API来实现地图服务的,那么这些地图类网站如何通过地图服务来获取收益呢?可以通过Google AdSense for Maps来实现地图广告显示. Google AdSense for Maps有两种广告显示格式,一种是搜索类广告,一种是内容类广告,这很类似于Google的搜索联盟和内容广告.Google在地图API的文档中讲述了这两类地图广告的代码设置方法. 1.搜索类广告 这类广

的确不错的iBATIS SQL Maps

昨天下了Jpetstore要学习一下,于是在今天到iBATIS的官网上先看了看文档 发现SQL MAPS的确是个值得学习并应用的好东西 ------ iBATIS可以说非常容易上手,只需要懂得JavaBeans, XML 和 SQL就可以顺利应用了 这也是iBATIS的魅力所在(我是这么觉得的呵呵) iBATIS在JavaObject和数据库对应上提供了一个非常简单并且灵活的解决方案. 我们只需要使用纯正的SQL语句就可以实现从数据库到JavaObject的转换了,而不用再去写JDBC代码了 仅

基于DeepZoom技术的Bing Maps客户端实现研究

目前基于Silverlight技术的Web GIS客户端实现,包括微软Bing Maps Silverlight Control,以及开源的Web GIS客户端组件DeepEarth 项目,核心都是采用Silverlight中的DeepZoom技术实现.可能您已经知道 DeepZoom技术以MultiScaleImage控件为核心,其内部有一个 MultiScaleTileSource类型的源属性,主要用于设置 MultiScaleImage控件所要呈现的数据源,可以通过学习Deep Zoom

Google Maps增加更多海底和海面“街景”

Google继续丰富自己的海底"街景",他们使用特殊的全景拍照设备在缓慢的对海底世界进行着探索,让我们不用背上氧气瓶就可以畅游海底世界.以前Google Maps里只有大堡礁.菲律宾和夏威夷的6处海底街景,这次则增加了一大堆. Google曾经透露说他们的海底街景拍摄队伍每天下水三次,每次持续一小时,可收集到2公里的3-4千张照片. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/soft/tools/

Google Maps for iOS 2.3.4导航更快并增加语言支持

Google已经更新了iOS版本的地图应用,在新版本中除了带来新的功能,还加入了对阿拉伯语和希伯来语的支持.此外,最大的改进还是对导航的访问,现在已经变得更快.而在路径重规划的时候,该应用也有望更快更准确.新增的路线和交通概览也应该有所帮助,特别是当你在驾驶的时候.当然,这些提示仅适用于那些非重度使用者,下面是本次(Google Maps 2.3.4 for iOS)的更新日志: 更快进入导航,具备了完整的路线和交通概览: 侧边菜单加入了提示和技巧: 新增阿拉伯语和希伯来语的支持(包括语音导航)

Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图

Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方便的开发模型,但也有许多不足之处,比如我们想实现一个迷你小地图功能,对于Bing Map Silverlight Control就没有这样的内置控件.但不必费心费神的自己去开发一个这样的控件来实现这个功能,因为在DeepEarth中已经为我们提供了这样一个控件,首先看看在Bing Maps(http://cn

Bing Maps进阶系列四:路由功能服务(RouteService)

Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现驾驶路线和地点,旅游航线等.可以通过该服务的地址(http://dev.virtualearth.net/WebServices/v1/RouteService/RouteService.svc)添加该服务的Web服务引用. 路由功能服务提供了两个方法,分别是CalculateRoute()和CalculateRoutesFormMajorRoads(),其实现的功能分

Bing Maps进阶系列一:初识Bing Maps地图服务

Bing Maps提供了一组WCF的地图服务,使用这些服务我们可以方便的在自己的应用系统里实现地理位置搜索等相关功能.他们分别是地理编码服务(GeocodeService).地理图像服务(ImageryService).路由功能服务(RouteService)和地理搜索服务(SearthService). 一.地理编码服务(GeocodeService) 地图编码服务提供了以一个有效的物理地址在地图上匹配其对应的地图地址(既地理经度和纬度坐标)和以地理经度和纬度坐标进行反向匹配物理地址路径的功能