java - 实现静态 "memory"映射

标签 java dictionary static

我正在编写一个用于测试目的的小型应用程序,该应用程序接受 SOAP 调用、为每个调用生成 UID 并返回此 UID。 UID 需要存储在服务器上,所以我想我应该使用一个简单的静态 Map 来存储它们。

我创建了一个新类:

MemoryMap.java

public class MemoryMap {

    static Map<String, String> memoryMap = new ConcurrentHashMap<String, String>();

    static void printMapContents() {
        for (Entry<String, String> pair : memoryMap.entrySet()) {
            System.out.println("Key = [" + pair.getKey() + "]");
            System.out.println("Value = [" + pair.getValue() + "]");
        }
    }
}

然后将其与调用一起使用:

MemoryMap.memoryMap.put(UID, "testString");
MemoryMap.printMapContents();

还有...

MemoryMap.memoryMap.remove(parameters.getUID());
MemoryMap.printMapContents();

这工作得很好,但我不认为这是否是为此目的实现单个 Map 的推荐方法。

最佳答案

如果您的应用程序必须模拟后端,例如数据库,我建议在某些数据存储接口(interface)中抽象出映射,然后为您的应用程序提供由映射支持的该接口(interface)实现的单例范围实例。例如:

interface MyDataStore<V>{
  V retrieve(UUID id);
  void remove(UUID id);
}

public final class MockDataStore implements MyDataStore<String>{
  private final static MockDataStore instance = new MockDataStore();
  public static MockDataStore instance(){
    return instance;
  }
  private MockDataStore(){}
  private final ConcurrentHashMap<UUID,String> m = 
    new ConcurrentHashMap<UUID,String>();
  @Override
  String retrieve(UUID id){
    return m.get(id);
  }
  @Override
  void remove(UUID id){
    m.remove(id);
  }
}

然后明天您可以将实现替换为与实际数据库交互的内容。这是 ORM 系统的非常粗略的近似。

更好的是,我会立即从数据库开始。您可以使用内存数据库(例如 H2 ),以便在需要时将其替换为实际数据库(可能存在一些小的迁移问题)。

最后,如果您的存储需求增长,例如,您需要表及其之间的关系,我建议查看 JPA 及其实现之一,例如 Hibernate .

关于java - 实现静态 "memory"映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840723/

相关文章:

java - 字典数据结构+快速复杂度方法

python - 在 .py 文件中引用 django 中的静态文件(不在模板中)

java - 比较静态类中使用的参数

java - 在 Java 中解析 XML 并忽略标签

java - 手动设置 Spring WebSocket STOMP 支持

java - CLI 如何持续检查更改

ios - 显示用户位置按钮 - Swift

java - 区分连​​接被拒绝和连接超时

python - 从字典创建多维数组 (D>5)..?

java - 构造函数中的枚举和静态变量