您的位置:首页 > 其它

使用泛型的Map集合案例

2019-08-10 14:40 78 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/a805814077/article/details/99072799

定义个泛型类 DAO,在其中定义一个Map 成员变量,Map 的键为 String 类型,值为 T 类型。

分别创建以下方法:
public void save(String id,T entity): 保存 T 类型的对象到 Map 成员变量中
T get(String id):从 map 中获取 id 对应的对象
void update(String id,T entity):替换 map 中key为id的内容,改为 entity 对象
List list():返回 map 中存放的所有 T 对象
void delete(String id):删除指定 id 对象

定义一个 User 类:
该类包含:private成员变量(int类型) id,age;(String 类型)name。

创建 DAO 类的对象, 分别调用其 save、get、update、list、delete 方法来操作 User 对象,
使用 Junit 单元测试类进行测试。

创建DAO类

package com.yzy.map;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @className DAO.java
* @author yangsir
* @version V1.0
* @date 2019年8月10日-下午1:38:18
* @description 泛型
*
*              定义个泛型类 DAO<T>,在其中定义一个Map 成员变量,Map 的键为 String 类型,值为 T 类型。
*              分别创建以下方法: public void save(String id,T entity): 保存 T 类型的对象到 Map
*              成员变量中 T get(String id):从 map 中获取 id 对应的对象 void update(String
*              id,T entity):替换 map 中key为id的内容,改为 entity 对象 List<T> list():返回
*              map 中存放的所有 T 对象 void delete(String id):删除指定 id 对象
*
*
*/
public class DAO<T> {
Map<String, T> map;// 题目说的是要创建一个Map类型的变量,Map有键的类型,值的类型

public void save(String id, T entity) {// 将Map里面的添加元素的put方法写成自己的save方法,传入对应的参数即可
map.put(id, entity);
}

T get(String id) {// 将Map里面的获取对应对象的get方法写成自己的get方法,传入对应的参数即可
return map.get(id);

}

void update(String id, T entity) {// 将Map里面的替换元素的replace方法写成自己的update方法,传入对应的参数即可
map.replace(id, entity);
}

List<T> list() {// 遍历所有T对象
List<T> list = new ArrayList<T>();// 首先创建一个list集合对象
Set<String> set = map.keySet();// 然后需要通过Map里面的keySet()方法来获取键值,它的返回值为Set,所以我们要创建Set对象
Iterator<String> it = set.iterator();// 创建迭代器对象传入set
while (it.hasNext()) {// 迭代
String key = it.next();// 将每次迭代的key保存下来
System.out.println(map.get(key));// 通过Map里面的get(key)方法来获取对应的值
}
return list;// 返回list集合

}

void delete(String id) {// 将Map里面的删除对象的remove方法写成自己的delete方法,传入对应的参数即可
map.remove(id);
}
}

创建User类

package com.yzy.map;

/**
* @className User.java
* @author yangsir
* @version V1.0
* @date 2019年8月10日-下午1:59:46
* @description private成员变量(int类型) id,age;(String 类型)name。
*/
//创建User类
public class User {
private int id;
private int age;
private String name;

public User() {
super();
}

public User(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

// 因为后面要输出,所以重写一下toString方法
@Override
public String toString() {
return "User [id=" + id + ", age=" + age + ", name=" + name + "]";
}

}

创建测试类TestDAO

package com.yzy.map;

import java.util.HashMap;

import org.junit.Test;

/**
* @className TestDAO.java
* @author yangsir
* @version V1.0
* @date 2019年8月10日-下午2:00:58
* @description 创建 DAO 类的对象, 分别调用其 save、get、update、list、delete 方法来操作 User 对象, 使用
*              Junit 单元测试类进行测试。
*/
public class TestDAO {

@Test
public void test1() {

DAO<User> d = new DAO<User>();// 创建一个DAO对象d,泛型为User
d.map = new HashMap<String, User>();// 对map进行实例化,任何对象在使用的时候都需要初始化,前面我们没有给map赋值,这里不初始化直接使用的话会报空指针异常
d.save("a", new User(1, 23, "张三"));// 添加元素
d.save("b", new User(2, 24, "李四"));
d.save("c", new User(3, 25, "王五"));
d.save("d", new User(4, 26, "赵六"));
System.out.println(d.map);// 直接输出
System.out.println("=======================================");
}

@Test
public void test2() {
DAO<User> d = new DAO<User>();// 创建一个DAO对象d,泛型为User
d.map = new HashMap<String, User>();// 对map进行实例化,任何对象在使用的时候都需要初始化,前面我们没有给map赋值,这里不初始化直接使用的话会报空指针异常
d.save("a", new User(1, 23, "张三"));// 添加元素
d.save("b", new User(2, 24, "李四"));
d.save("c", new User(3, 25, "王五"));
d.save("d", new User(4, 26, "赵六"));
System.out.println(d.get("a"));// 通过获取User的id来获取其的entity值
System.out.println(d.get("b"));
System.out.println(d.get("c"));
System.out.println(d.get("d"));
System.out.println("=======================================");

}

@Test
public void test3() {
DAO<User> d = new DAO<User>();// 创建一个DAO对象d,泛型为User
d.map = new HashMap<String, User>();// 对map进行实例化,任何对象在使用的时候都需要初始化,前面我们没有给map赋值,这里不初始化直接使用的话会报空指针异常
d.save("a", new User(1, 23, "张三"));// 添加元素
d.save("b", new User(2, 24, "李四"));
d.save("c", new User(3, 25, "王五"));
d.save("d", new User(4, 26, "赵六"));
d.update("a", new User(7, 27, "周七"));// 删除元素
System.out.println(d.map);
System.out.println("=======================================");
}

@Test
public void test4() {
DAO<User> d = new DAO<User>();// 创建一个DAO对象d,泛型为User
d.map = new HashMap<String, User>();// 对map进行实例化,任何对象在使用的时候都需要初始化,前面我们没有给map赋值,这里不初始化直接使用的话会报空指针异常
d.save("a", new User(1, 23, "张三"));// 添加元素
d.save("b", new User(2, 24, "李四"));
d.save("c", new User(3, 25, "王五"));
d.save("d", new User(4, 26, "赵六"));
d.list();// 通过我们写好的遍历方法来进行遍历,与上面不同的是上面输出的是一个集合里面的元素,也就是说所有的元素在集合里一起看做为一个元素,这里是进行单个输出
}

@Test
public void test5() {
DAO<User> d = new DAO<User>();// 创建一个DAO对象d,泛型为User
d.map = new HashMap<String, User>();// 对map进行实例化,任何对象在使用的时候都需要初始化,前面我们没有给map赋值,这里不初始化直接使用的话会报空指针异常
d.save("a", new User(1, 23, "张三"));// 添加元素
d.save("b", new User(2, 24, "李四"));
d.save("c", new User(3, 25, "王五"));
d.save("d", new User(4, 26, "赵六"));
d.delete("a");// 删除元素
d.delete("b");
d.delete("c");
d.list();// 遍历
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: