【发布时间】:2013-08-01 00:06:28
【问题描述】:
我有一种方法可以从作为员工信息的对象集合中提取值:
public class Employee
{
public String AREA;
public String EMPLOYEE_ID;
public String EMPLOYEE_NAME;
}
我想获得我认为更容易的所有不同区域,只需检查 ArrayList 是否包含该值,如果不是添加它,则需要 187 毫秒才能完成,:
long startTime = System.currentTimeMillis();
ArrayList<String> distinct_areas = new ArrayList<String>();
for (int i = 0; i < this.employeeTress.length; i++)
{
if (!distinct_areas.contains(this.employeeTress[i].AREA))
distinct_areas.add(this.employeeTress[i].AREA);
}
String[] unique = new String[distinct_areas.size()];
distinct_areas.toArray(unique);
long endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");
然后我想用不同的方法来看看它是否变得更快,对数组进行排序,然后只检查最后一项,如果它不同,然后添加它,它会更快一点,它需要 121 毫秒才能完成:
startTime = System.currentTimeMillis();
String[] vs = new String[this.employeeTress.length];
for (int i = 0; i < this.employeeTress.length; i++)
{
vs[i] = this.employeeTress[i].AREA;
}
Arrays.sort(vs);
ArrayList<String> vsunique = new ArrayList<String>();
vsunique.add(vs[0]);
for (int i = 0; i < vs.length; i++)
{
if (!vsunique.get(vsunique.size()-1).equals(vs[i]))
{
vsunique.add(vs[i]);
}
}
String[] uni = new String[vsunique.size()];
vsunique.toArray(uni);
endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");
我是 Java 新手,我想知道一种更好的方法来做到这一点。 *注意,此代码应在 android 姜饼 API LVL 10 中工作 问候。
【问题讨论】:
-
使用
Set而不是List。另外,我不会为此担心性能改进直到它证明是应用程序中的真正瓶颈。 -
Java 中唯一应该全部大写的类型是
final static原语或enums。 -
@Dukeling 这包括 JAVA 语言本身的名称 :))
-
对于所有大写字段,该类是从提取表单中复制粘贴的一个 json 结构,该结构具有来自 ORM 的所有大写字段,并从 Oracle 数据库自动创建表,换句话说,我没有键入它们。
-
如果这是一个 ORM,你不能做一些事情来通过 ORM 获得不同的区域吗?
标签: java collections