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
- HashMap实现缓存
- HASHMAP缓存简单java实现
- HashMap实现简单的缓存Cache
- 基于HashMap实现简单的缓存处理
- JAVA 单例模式与hashmap结合实现缓存
- JAVA 单例模式与hashmap结合实现缓存
- JAVA 单例模式与hashmap结合实现缓存
- 用hashmap来模拟缓存实现的机制
- HashMap缓存测试
- 自建hashMap缓存
- HashMap实现
- HashMap实现
- HashMap实现
- HashMap实现
- 用HashMap和双链表实现多线程下的LRU缓存算法(java版)
- LinkedHashMap/HashMap(数据缓存准备)
- HashMap(4)--动手实现HashMap
- 缓存实现
- PullToRefresh使用详解(一)--构建下拉刷新的listView
- Spring的配置文件模板(the basic structure of XML-based configuration metadata)
- Spring MVC DispatcherServlet 源码解读View的创建(Velocity)
- python学习笔记(1)--《python基础教程》第1章内容总结
- HDU 1002.A + B Problem II
- HashMap实现缓存
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- 常用库函数摘要
- codeforces Sereja and Dima 题解
- ACM-字符串处理之Substrings——hdu1238
- nodejs详解
- 拆解报告:谷歌眼镜硬件成本约80美元
- mongodb使用笔记
- 设计模式(笔记)概述