0
对象我有以下判定表:爪哇 - 比较算法
我的任务是相互比较使用设置choosen属性的所有对象(S1,S2,S3 ...)(例如{ 距离,容量})。所以要实现这个,我必须创建两个LOOPS(一个嵌套)并使用IF条件。
当设置的对象很小时,一切正常。但是当设置很大时(例如10000个对象),这种解决方案的性能越来越差......
这是另一种更快,更“更智能”的方式吗?
对象我有以下判定表:爪哇 - 比较算法
我的任务是相互比较使用设置choosen属性的所有对象(S1,S2,S3 ...)(例如{ 距离,容量})。所以要实现这个,我必须创建两个LOOPS(一个嵌套)并使用IF条件。
当设置的对象很小时,一切正常。但是当设置很大时(例如10000个对象),这种解决方案的性能越来越差......
这是另一种更快,更“更智能”的方式吗?
伪代码:
步骤1. 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}
函数返回ShortYES
。
第3步:现在打印具有长度大于1
复杂度分析的更大的HashMap的ArrayList的值:
你的方法为O(n^2)
我的方法为O(n )(因为HashMap的添加和得到的复杂度是O(1))
你的输出到底是什么?你在排序? – ergonaut
你需要告诉我们更多关于整个算法的目的是什么。如果你想比较所有的对象,没有比嵌套'for'循环更好的方式,因此二次运行时间也是如此。问题是,你是否真的需要比较所有可能的对象或者你需要某种排序? –
示例:当属性设置为{容量,要求}时,输出可能是{{S5,S6},{S1,S4}} 排序:如何在这种情况下进行运动? – Wicia