Java - 对象比较算法
Java - Objects comparing algorithm
我有以下决定table:
我的任务是使用选择的属性集(例如 {Distance、Capacity 将所有对象(S1、S2、S3...)相互比较})。所以为了实现这一点,我必须创建两个循环(一个嵌套)并使用 IF 条件。
当对象集很小时,一切正常。但是当集合很大(例如 10000 个对象)时,这个解决方案的性能越来越差...
这是另一种更快的 "smarter" 方法吗?
伪代码:
第一步。HashMap<String, ArrayList<String>> hashMap = new HashMap<>();
步骤 2. 对每个对象 s 做
String key = getSelectedAttributesValueInString();
if (!hashMap.containsKey(key)) {
hashMap.put(key, new ArrayList<String>());
}
hashMap.get(key).add(s.getName);
此处 getSelectedAttributesValueInString
是所有选定属性值的串联。
例如:对象s1
属性{Distance, Capacity}
函数return ShortYES
。
第 3 步。现在打印长度大于 1 的 hashMap arraylist 值。
复杂度分析:
你的方法 O(n^2)
我的方法 O(n)(因为 HashMap 添加和获取复杂度是 O(1))
我有以下决定table:
我的任务是使用选择的属性集(例如 {Distance、Capacity 将所有对象(S1、S2、S3...)相互比较})。所以为了实现这一点,我必须创建两个循环(一个嵌套)并使用 IF 条件。
当对象集很小时,一切正常。但是当集合很大(例如 10000 个对象)时,这个解决方案的性能越来越差...
这是另一种更快的 "smarter" 方法吗?
伪代码:
第一步。HashMap<String, ArrayList<String>> hashMap = new HashMap<>();
步骤 2. 对每个对象 s 做
String key = getSelectedAttributesValueInString();
if (!hashMap.containsKey(key)) {
hashMap.put(key, new ArrayList<String>());
}
hashMap.get(key).add(s.getName);
此处 getSelectedAttributesValueInString
是所有选定属性值的串联。
例如:对象s1
属性{Distance, Capacity}
函数return ShortYES
。
第 3 步。现在打印长度大于 1 的 hashMap arraylist 值。
复杂度分析:
你的方法 O(n^2)
我的方法 O(n)(因为 HashMap 添加和获取复杂度是 O(1))