`
chensl
  • 浏览: 57958 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Collection之映射表(Maps)

阅读更多

映射表(map)用来存放键/值对,如果提供了键,就能够找到值,如一张员工信息记录表,键为员工ID,值为Employee对象。Java类库中为map提供了两个通用的实现:HashMap和TreeMap,都实现了Map接口。

下列代码为存储的员工信息建立一个散列映射表(HashMap):

Map<String, Employee> staff = new HashMap<String, Employee>(); // HashMap implements Map
Employee harry = new Employee("Harry Hacker");
staff.put("987-98-9996", harry);
. . .

 要想检索一个对象,必须提供一个键,

String s = "987-98-9996";
e = staff.get(s);   //gets harry,如果没有对应信息,返回null

 

remove方法用于从映射表中删除给定键对应的元素。size方法返回元素数。

集合框架没有将映射表本身视为一个集合(其他的数据结构框架则将映射表视为对(pairs)的集合,或视为用键作为索引的值的集合)。然而可以获得映射表的视图,这是一组实现了Collection接口对象,或者它的子接口的视图。

有3个视图,分别是键值、值集合(不是集)、和键/值对集。键与键/值对形成了一个集,这是因为在映射表中一个键只能有一个副本。下列方法将返回这3个视图(条目集的元素是静态内部类Map.Entry的对象)

(上段的英文原文如下:The collections framework does not consider a map itself as a collection. (Other frameworks for data structures consider a map as a collection of pairs, or as a collection of values
that is indexed by the keys.) However, you can obtain views of the map, objects that implement the Collection interface, or one of its subinterfaces.
There are three views: the set of keys, the collection of values (which is not a set), and the set of key/value pairs. The keys and key/value pairs form a set because there can be only one copy of a key in a map. The methods return these three views. The elements of the entry set are objects of the static inner class Map.Entry.)

Set<K> keySet()
Collection<K> values()
Set<Map.Entry<K, V>> entrySet()

 注意,keySet既不是HashSet,也不是TreeSet,而是实现了Set接口的某个其他类的对象。Set接口扩展了Collection接口。因此,可以与使用任何集合一样使用keySet.

例如,可以枚举映射表中的所有键:

Set<String> keys = map.keySet();
for(String key : keys)
{
    //do something with key
}

 如果想要同时查看键与值,就可以通过枚举各个条目查看,以避免对值进行查找。可以使用下面这段代码框架:

for (Map.Entry<String,Employee> entry: staff.entrySet())
{
    String key = entry.getKey();
    Employee value = entry.getValue();
    // do something with key,value
}

 下面程序显示了映射表的操作过程:

import java.util.*;

/**
 * This program demonstrates the use of a map with key type String and value type Employee.
 *  @author Cay Horstmann
 */
public class MapTest
{
   public static void main(String[] args)
   {
      Map<String, Employee> staff = new HashMap<String, Employee>();//首先将键/值对添加到一个映射表中
      staff.put("144-25-5464", new Employee("Amy Lee"));
      staff.put("567-24-2546", new Employee("Harry Hacker"));
      staff.put("157-62-7935", new Employee("Gary Cooper"));
      staff.put("456-62-5527", new Employee("Francesca Cruz"));

      // print all entries

      System.out.println(staff);

      // remove an entry

      staff.remove("567-24-2546");//从映射表中删除一个键,同时与之对应的值也删除了

      // replace an entry

      staff.put("456-62-5527", new Employee("Francesca Miller"));//修改于某一个键对应的值

      // look up a value

      System.out.println(staff.get("157-62-7935"));//调用get方法,查看值

      // iterate through all entries

      for (Map.Entry<String, Employee> entry : staff.entrySet())
      {
         String key = entry.getKey();
         Employee value = entry.getValue();
         System.out.println("key=" + key + ", value=" + value);
      }
   }
}

/**
 * A minimalist employee class for testing purposes.
 */
class Employee
{
   /**
    * Constructs an employee with $0 salary.
    * @param n the employee name
    */
   public Employee(String n)
   {
      name = n;
      salary = 0;
   }

   public String toString()
   {
      return "[name=" + name + ", salary=" + salary + "]";
   }

   private String name;
   private double salary;
}

 

分享到:
评论

相关推荐

    iBATIS-SqlMaps,ibatis映射文件

    配置文件通常会包含多个SqlMap的引用,这些SqlMap对应于不同的数据库表或者业务对象。 SqlMap.xml文件则是具体的SQL映射文件,它是iBATIS的核心,定义了SQL语句、结果映射、参数映射等。映射文件中的每个元素都代表...

    google-collections jar包

    2. **双向映射**:`BiMap`接口提供了双向映射的功能,这意味着对于每个键,都有一个唯一的值与之对应,反之亦然。`HashBiMap`是实现`BiMap`的一个常见选择,可以方便地进行键值之间的相互查找。 3. **过滤映射**:`...

    前端项目-d3-collection.zip

    1. **d3.map()**: 这个功能允许我们创建一个关联数组,也称为映射或哈希表。在JavaScript中,原生对象可以作为简单的键值对存储,但d3.map()提供了一个更加强大的接口,支持基于字符串键的操作,如查找、添加、删除...

    bada2.0培训_2_2_Base_Collection

    综上所述,bada2.0的Base Collection框架为开发者提供了丰富且强大的数据结构支持,涵盖了从简单列表到复杂映射的各种需求,极大地简化了数据管理和操作的难度,提高了应用程序的性能和可维护性。无论是对于初学者...

    googleCollection

    10. **Maps**: 提供了创建Map的各种方式,如`Maps.uniqueIndex()`可以创建一个映射,其中的键是值的唯一标识。 谷歌集合库还包含许多其他工具类,如`Preconditions`用于参数检查,`Joiner`用于字符串连接,`...

    OGNL中文版详细文档

    映射表(Maps) 对集合的投影(Project) 在集合中查询 查找第一个匹配项 查找最后一个匹配项 调用构造方法 调用静态方法 读取静态域(Static Fields) 表达式计算 伪Lambda表达式 供集合使用的伪属性 与Java...

    Java集合Collection、List、Set、Map使用详解

    容器大致可以分为两大类:集合(Collections)和映射(Maps)。 - **集合**:用来存储单个值的对象,包括`List`、`Set`等。 - **映射**:存储键值对的对象,典型代表是`Map`。 #### Collection `Collection`是...

    mybatis多表上课代码.zip

    在 `springboot03` 这个目录中,可能包含了多个实体类(Entity)以及对应的映射文件(Mapper XML),每个实体类代表一个数据库表,映射文件则定义了与之相关的 SQL 语句。 在处理多表关联查询时,MyBatis 提供了...

    JavaEE多表查询源代码下载

    - **嵌套结果映射(Nested Result Maps)**:通过在resultMap中定义子resultMap,实现复杂的结果映射,将不同表的数据结构一一对应。 - **嵌套查询(Nested Selects)**:使用或&lt;collection&gt;标签,MyBatis会在查询...

    mybatis多表查询.zip

    1. **嵌套结果映射(Nested Result Maps)**:当查询涉及到多个实体类时,MyBatis允许我们定义嵌套的结果映射,将复杂的结果集转换为易于处理的对象结构。通过`&lt;resultMap&gt;`标签,我们可以定义不同的字段映射,处理...

    MyBatis通用插件自动生成代码器

    通过这款插件,开发者可以快速地生成与数据库表对应的实体类(Entity)、接口(Mapper)以及XML映射文件,大大提升了开发效率,减少了手动编写重复代码的时间。 在MyBatis框架中,实体类是用来表示数据库表中一行...

    mybatis 一对多反过来

    3. **结果映射配置**:在`&lt;resultMap&gt;`中定义一对一或一对多的结果映射,通过`&lt;id&gt;`、`&lt;result&gt;`标签映射字段,同时使用`&lt;association&gt;`或`&lt;collection&gt;`标签处理关联关系。 4. **SQL查询编写**:编写SQL查询语句,...

    estrutura_dados_ifpe_maps_sets

    3. 关联多个值到一个键,例如多值映射,可以使用Guava库的MultiMap。 在Java中,Map和Set都有丰富的API供开发者使用,如`add()`, `remove()`, `put()`, `get()`, `containsKey()`, `containsValue()`等方法,它们...

    容器的分类

    在Java中,容器主要分为两大类:集合(Collections)和映射(Maps)。集合是单一元素的存储结构,而映射则是键值对的存储结构。在集合框架中,又可以细分为List、Set和Queue等接口,它们各自有特定的用途和行为。 1...

    mybatis_day04.zip

    2. **嵌套结果映射(Nested Result Maps)**: 当查询结果包含复杂的数据结构,如一个表的结果嵌套在另一个表的结果中时,可以使用嵌套结果映射来处理。这通过在结果映射中定义子结果映射来实现。 3. **关联映射...

    myBatis 基础测试 多表关联 集合测试myelipse项目

    - 在MyBatis中,多表关联可以通过`&lt;association&gt;`、`&lt;collection&gt;`、`&lt;join&gt;`等元素实现。例如,使用`&lt;association&gt;`可以处理一对多或一对一的关系,而`&lt;collection&gt;`用于处理一对多的关系。 - 关联查询可以采用...

    MyBatis架构图详解.pdf

    例如,一对多关系通常用在客户与订单的场景中,客户类中会有一个订单列表,通过&lt;collection&gt;标签映射。而多对一关系,如订单与客户,订单类中会包含一个客户对象,这里使用标签来实现。 总的来说,MyBatis框架以其...

    Mybatis入门项目

    多表操作在Mybatis中通常涉及到JOIN,可以通过嵌套结果映射(Nested Result Maps)或关联映射(Association Mapping)实现。这需要在XML映射文件中定义多个结果映射,然后在查询中使用`&lt;association&gt;`或`...

    基于FreeBSD和Postfix虚拟域邮件系统5.5

    这需要一个包含所有域和对应用户的映射表,可以是文本文件或数据库连接。MySQL作为后端数据库,可以提供更灵活和扩展的用户管理。 **MySQL数据库** MySQL用于存储邮件用户的用户名、密码和其他元数据。创建一个...

Global site tag (gtag.js) - Google Analytics