自己写一个Map (实现Map接口并利用散列原理)

1.Entry

Map是java中的接口,Map.Entry是Map的一个内部接口。

Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

主要作用:降低获取value的复杂度。

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里面的值。

2.实现Map接口的自己的Map

package com.hggggc.container;

import java.util.*;

/**
 * Created by jd3 on 2019-07-03.
 */
public class HgcMap implements Map {
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MapStruct是一个Java的代码生成器,用于从一个对象映射到另一个对象。 要使用MapStruct创建转换,您需要定义源对象和目标对象之间的映射关系。这可以通过创建一个接口,并使用MapStruct注解来完成。 例如,假设您有一个源对象,称为“PersonDTO”,它有一个名称和年龄字段,以及一个目标对象,称为“PersonEntity”,它有一个名字和年龄字段。 您可以创建以下MapStruct转换接口: ``` @Mapper public interface PersonMapper { PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class); @Mapping(source = "name", target = "name") @Mapping(source = "age", target = "age") PersonEntity toEntity(PersonDTO personDTO); @Mapping(source = "name", target = "name") @Mapping(source = "age", target = "age") PersonDTO toDto(PersonEntity personEntity); } ``` 然后,您可以使用此接口将PersonDTO对象转换为PersonEntity对象,如下所示: ``` PersonDTO personDTO = new PersonDTO(); personDTO.setName("John Doe"); personDTO.setAge(30); PersonEntity personEntity = PersonMapper.INSTANCE.toEntity(personDTO); ``` 相反,您也可以使用该接口将PersonEntity对象转换为PersonDTO对象: ``` PersonEntity personEntity = new PersonEntity(); personEntity.setName("John Doe"); personEntity.setAge(30); PersonDTO personDTO = PersonMapper.INSTANCE.toDto(personEntity); ``` 这就是如何使用MapStruct进行对象转换的简单示例。 ### 回答2: MapStruct 是一个用于 Java 对象之间映射转换的代码生成器。下面我将举一个简单的例子来说明如何使用 MapStruct 进行转换。 假设我们有两个类:Person 和 PersonDTO。Person 类包含了人的基本信息,如姓名、年龄和性别,而 PersonDTO 类则是 Person 类的数据传输对象,它只包含姓名和年龄两个属性。 首先,我们需要在 pom.xml 文件中添加 MapStruct 依赖: ``` <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.4.2.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.4.2.Final</version> <scope>provided</scope> </dependency> ``` 接下来,我们需要创建一个转换器接口,该接口使用了 MapStruct 的注解来定义转换规则: ```java @Mapper public interface PersonMapper { PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class); @Mapping(source = "name", target = "name") @Mapping(source = "age", target = "age") PersonDTO personToDto(Person person); } ``` 在上述代码中,@Mapper 注解表示这是一个 MapStruct 的转换器接口,通过 @Mapping 注解来指定属性的映射关系。 最后,在使用转换器进行对象转换的地方调用相应的方法即可: ```java Person person = new Person(); person.setName("张三"); person.setAge(25); PersonDTO personDTO = PersonMapper.INSTANCE.personToDto(person); System.out.println(personDTO.getName()); System.out.println(personDTO.getAge()); ``` 上述代码中,我们先创建一个 Person 对象,然后使用转换器的 personToDto 方法将其转换为 PersonDTO 对象,最后打印出 PersonDTO 对象的属性值。 这就是使用 MapStruct 进行对象之间映射转换的简单例子。当然,MapStruct 还提供了更多高级的功能和配置选项,可以根据具体需求进行深入学习和使用。 ### 回答3: MapStruct是一个开源的Java注解处理器,用于从一个Java对象转换为另一个Java对象。它通过通过使用注解来定义转换规则和生成转换代码。 以下是一个简单的MapStruct转换示例: 1. 首先,定义需要转换的源对象和目标对象的类。例如,我们有一个名为`Person`的源对象类和一个名为`PersonDto`的目标对象类。 ```java public class Person { private String name; private int age; // getters and setters } public class PersonDto { private String fullName; private int age; // getters and setters } ``` 2. 接下来,使用MapStruct的注解在源对象和目标对象之间创建映射规则。创建一个名为`PersonMapper`的接口,并使用`@Mapper`注解来指定映射规则。 ```java @Mapper public interface PersonMapper { PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class); @Mapping(source = "name", target = "fullName") PersonDto personToPersonDto(Person person); } ``` 3. 最后,通过调用生成的映射方法将源对象转换为目标对象。 ```java Person person = new Person(); person.setName("John"); person.setAge(30); PersonDto personDto = PersonMapper.INSTANCE.personToPersonDto(person); ``` 在上面的示例中,`personToPersonDto`方法将从`Person`对象的`name`属性映射到`PersonDto`对象的`fullName`属性,并将`age`属性直接复制到目标对象中。 这就是一个简单的MapStruct转换示例。MapStruct提供了更丰富的功能,例如支持集合、自定义转换逻辑等。通过编合适的映射规则和使用MapStruct的注解,您可以轻松地完成对象之间的转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值