具有2个值字段的自定义散列映射VS在java中实现具有数组作为值的散列映射

时间:2015-08-18 01:48:47

标签: java arraylist data-structures hash hashmap

它们是否为编写我自己的哈希映射数据结构带来了好处,而不是在java中使用像hashmap这样的预编写类。

背景。 我正在编写一个spring应用程序,它需要能够映射单个键以映射到两个值的数据结构。

我现在能想到的现有好处将是: - 可以包含更多方法,如swap(交换值1和2) - 更好地控制散列函数 - 一般控制更多

想知道: - 如果他们在性能或复杂性方面有任何缺陷 - 或者如果编写我自己的数据结构有任何意义

感谢您花时间阅读。

编辑: 如果它有帮助。 我只需要快速访问速度(像get和contains这样的方法) 对于" put"的方法,花费的时间可能会长一些 关于我应该做什么的任何建议?

2 个答案:

答案 0 :(得分:2)

保持简单:使用值类型为简单类的HashMap来保存两个值,例如(为简单起见,我假设键,两个值都是String):

class Pair {
    private String a;
    private String b;
    public Pair(String a, String b) {
        this.a = a;
        this.b = b;
    }
    public String getA() {
        return a;
    }
    public String getB() {
        return b;
    }
    public void swap() {
        // Note: Not threadsafe
        String tmp = a;
        a = b;
        b = tmp;
    }
    public boolean equals(Object o) {
        return o instanceof Pair
            && Objects.equals(a, ((Pair)o).a
            && Objects.equals(b, ((Pair)o).b;
    }
    public int hashCode() {
        return Objects.hash(a, b);
    }
}

Map<String, Pair> map = new HashMap<>();

答案 1 :(得分:0)

如果不使用java.util软件包,您可能会错过经过良好审核,经过验证且经久耐用的框架。没有冒犯,但你不太可能想出更好的设计和实现,特别是作为Java的核心API的一部分,无错误和优化。相反,使用存在的内容并编写自己的小方法,扩展现有的HashMap,或者找到另一个开源变体(例如,可能来自Apache FastHashMap)以获得额外的必需功能。

相关问题