我有一个类从数据库中获取数据并发送到UI以生成图表。
班级的执行时间为14秒
List listOfCLI =new ArrayList();
List listOfRRV =new ArrayList();
List listOfROP =new ArrayList();
List listOfACR =new ArrayList();
List listOfPIN =new ArrayList();
List listOfRIS =new ArrayList();
List listOfTAA =new ArrayList();
List listOfTAR =new ArrayList();
List listOfPHA =new ArrayList();
List listOfSAR =new ArrayList();
List listOfGRQ =new ArrayList();
List listOfADC =new ArrayList();
当我将代码更改为
时 List<DataMS> listOfCLI =new ArrayList<DataMS>();
List<DataMS> listOfRRV =new ArrayList<DataMS>();
List<DataMS> listOfROP =new ArrayList<DataMS>();
List<DataMS> listOfACR =new ArrayList<DataMS>();
List<DataMS> listOfPIN =new ArrayList<DataMS>();
List<DataMS> listOfRIS =new ArrayList<DataMS>();
List<DataMS> listOfTAA =new ArrayList<DataMS>();
List<DataMS> listOfTAR =new ArrayList<DataMS>();
List<DataMS> listOfPHA =new ArrayList<DataMS>();
List<DataMS> listOfSAR =new ArrayList<DataMS>();
List<DataMS> listOfGRQ =new ArrayList<DataMS>();
List<DataMS> listOfADC =new ArrayList<DataMS>();
执行时间最长为17秒.. 为什么eclipse建议添加Generic会产生这样的负面影响。
您也可以建议使用泛型来减少执行时间的最佳方式
**Map<String, List> reqCLI =new HashMap<String, List>();
Map<String, List> reqRRV =new HashMap<String, List>();
Map<String, List> reqROP =new HashMap<String, List>();
Map<String, List> reqACR =new HashMap<String, List>();
Map<String, List> reqPIN =new HashMap<String, List>();
Map<String, List> reqTAA =new HashMap<String, List>();
Map<String, List> reqTAR =new HashMap<String, List>();
Map<String, List> reqRIS =new HashMap<String, List>();
Map<String, List> reqPHA =new HashMap<String, List>();
Map<String, List> reqSAR =new HashMap<String, List>();
Map<String, List> reqGRQ =new HashMap<String, List>();
Map<String, List> reqADC =new HashMap<String, List>();
List<Map<String, List>> listCLI=new ArrayList<Map<String, List>>();
List<Map<String, List>> listRRV=new ArrayList<Map<String, List>>();
List<Map<String, List>> listROP=new ArrayList<Map<String, List>>();
List<Map<String, List>> listACR=new ArrayList<Map<String, List>>();
List<Map<String, List>> listPIN=new ArrayList<Map<String, List>>();
List<Map<String, List>> listTAA=new ArrayList<Map<String, List>>();
List<Map<String, List>> listTAR=new ArrayList<Map<String, List>>();
List<Map<String, List>> listRIS=new ArrayList<Map<String, List>>();
List<Map<String, List>> listPHA=new ArrayList<Map<String, List>>();
List<Map<String, List>> listSAR=new ArrayList<Map<String, List>>();
List<Map<String, List>> listGRQ=new ArrayList<Map<String, List>>();
List<Map<String, List>> listADC=new ArrayList<Map<String, List>>();**
这些是使用的剩余集合
答案 0 :(得分:2)
由于类型擦除(请参阅http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ101),泛型类型未在编译的字节码中表示,因此执行时的性能应该没有差异。参数化类型仅在编译时检查。
答案 1 :(得分:2)
唯一的区别是java编译器可以插入隐式强制转换:
List a = new ArrayList();
b.add("foo");
List b = new ArrayList();
for (Object o : a) {
b.add(o); // Adding an object.
}
没有演员表,但
中有隐式演员表List<String> a = new ArrayList<String>();
b.add("foo");
List<String> b = new ArrayList<String>();
// Each element is implicitly cast to a String which requires
// a runtime type check.
for (String s : a) {
b.add(s);
}
这是字节码级别的唯一区别。
如果不知道你正在做的写入和读取次数,但是RTTI检查相当便宜,很难说这是否会导致你看到的差异。
如果那是罪魁祸首,首选批量操作(如List.addAll
和Map.putAll
而不是循环应该可以消除这种开销。