1.以Room为key Person为value 用HashMap实现缓存 查询房间中的所有人
Person.java
package org.sh.test;
public class Person {
/**
* 姓名
*/
private String username;
/**
* 年龄
*/
private int age;
/**
* 体重
*/
private int weight;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String username) {
super();
this.username = username;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
Room.java
package org.sh.test;
import java.math.BigDecimal;
import java.util.List;
public class Room {
/**
* 房间名称
*/
private String roomName;
/**
* 房间面积
*/
private int area;
/**
* 房间价格
*/
private BigDecimal price;
/**
* 酒店的地址
*/
private String address;
/**
* 酒店的电话
*/
private String phoneNumber;
private List<Person> persons;
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public List<Person> getPersons() {
return persons;
}
public Room(String roomName) {
super();
this.roomName = roomName;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(!(obj instanceof Room)){
return false;
}
Room r1 = (Room)obj;
return r1.getRoomName().equals(this.getRoomName());
}
@Override
public int hashCode() {
return roomName.hashCode();
}
}
MyCache.java 缓存实现类
package org.sh.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyCache {
private static final HashMap<Room, List<Person>> map = new HashMap<Room, List<Person>>();
static{//先插入一个房间的人 做测试用
List<Person> list = new ArrayList<Person>();
Person person = null;
for(int i =0;i<5;i++){
person = new Person("user"+i);
list.add(person);
}
map.put(new Room("内置"), list);
}
List<Person> list = new ArrayList<Person>();
private static final Object lock = new Object();
private MyCache() {
}
public static List<Person> getPersonsByRoomName(Room room) {
List<Person> list = map.get(room);
if (list == null) {
synchronized (lock) {
list = map.get(room);
if (list == null) {// 没有则到数据库中取得
System.out.println("********************");//打印出这句话说明缓存中是没有的 要到数据库中取出
loadDataSource(room);
}
list = map.get(room);
}
}
return list;
}
private static void loadDataSource(Room room) {
List<Person> list = new ArrayList<Person>();
Person person = null;
for(int i =0;i<5;i++){
person = new Person("user"+i);
list.add(person);
}
map.put(room, list);//放到缓存中
}
}
测试类:分别测试刚开始缓存中有的和没有的
package org.sh.test;
import java.util.List;
public class MyCacheTest {
public static void main(String[] args) {
//List<Person> list = getUserList("内置");
List<Person> list = getUserList("内置1");
for(Person person:list){
System.out.println(person.getUsername());
}
}
private static List<Person> getUserList(String roomName) {
Room room = new Room(roomName);
List<Person> list = MyCache.getPersonsByRoomName(room);
return list;
}
}
测试结果:
********************
user0
user1
user2
user3
user4