java - 自定义 Java 类与映射的速度

标签 java runtime

哪个更快:

  1. a Set每个元素都是 CustomObject 的一个实例定义如下:

    public class CustomObject{
    
        private static String A;
        private static String B;
        private static String C;
    
        public static String getA(){
            return A;
        }
    
        public static getB(){
            return B;
        }
    
        public static getC(){
            return C;
        }
    }
    
  2. a Set每个元素都是 Map<String, String> 的一个实例其中每个 Map 的格式为 {"A" : Avalue, "B" : Bvalue, "C" : Cvalue} ?

  3. 或您能想到的任何其他可以更好地捕获此数据的数据结构

如果我想获取所有具有属性/键 A == "somevalue"的对象/ map 的子集?

您可以使用 .filter ,或任何其他库。另外,如果集合很大,答案会改变吗?

编辑:我的一位同事告诉我,自定义类的运行时间比散列图快——那么为什么有人会使用散列图呢?

最佳答案

我假设我们正在比较 Map<String, String>到这样的等效自定义类型:

public class CustomObject {
    private String a, b, c;

    public CustomObject(String a, String b, String c) {
        this.a = a; this.b = b; this.c = c;
    }
    public String getA() { return a; }
    public String getB() { return b; }
    public String getC() { return c; }
}

如果我们比较的操作是obj.getA()map.get("A") ,那么自定义 map 会更快,大概快1到2个数量级。是的……快了很多。

另一方面,如果我们把 CustomObject实例到一组“混合类型”对象中,我们对其字段一无所知,然后调用 getA变得更加困难/昂贵,Map解决方案当然更简单,也可能更快。 (这取决于您可以做出的假设。)


Also, does the answer change if the set is large?

没有。它不会显着改变性能特征。


Why would anyone ever use a hashmap, then?

更好/必须使用 Map 的用例是当可能的键集在编译时未知。这意味着你不能写 CustomClass作为带有手写源代码的常规类。

事实上,在大多数情况下,应根据两种方法的相对代码简单性和稳健性来决定您采用的方法。如果 key 是静态的,则 obj.getA()方法不仅更快。它也更健壮,因为你不会不小心写出类似 map.get("a") 的东西而不是 map.get("A") ...这将返回意外的 null并可能导致 NPE。如果 key 是动态的/在编译时未知,则 map.get("A")更简单,可能更健壮。

关于java - 自定义 Java 类与映射的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192416/

相关文章:

ios - 马特加洛韦书 EOC : delegate ignore protocol method

java - 如何在运行时加载 jar 文件

java - liquibase 与 Spring Boot 2 集成时出错

java - 标记上的语法错误、lambda 表达式的构造错误

java - 如何对齐 JPanel 中的 3 个 JLabel 的底部

java - 同步方法和 Semaphore(1, true) 的语义等价吗?

java - 删除实体会导致 hibernate 中的 ObjectDeletedException

php - 当多个用户尝试同时更改网站 MySQL 数据库中的相同数据时,会发生什么情况?

C++:将链表传递给静态函数

c++ - C++ 的检测(诊断)库