HashMap实现缓存

来源:互联网 发布:mysql日期格式化 编辑:程序博客网 时间:2024/05/16 00:45

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;}@Overridepublic 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());}@Overridepublic 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

0 0
原创粉丝点击