赞
踩
- @Test
- public void listToString() {
- ArrayList<String> longList = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- longList.add(String.valueOf(i));
- }
- //方法1
- long startTime1 = System.currentTimeMillis();
- String join1 = getString1(longList);
- long endTime1 = System.currentTimeMillis();
- log.info("方法一耗时:数据量:{},耗时{}", longList.size(), (endTime1 - startTime1));
-
- long startTime2 = System.currentTimeMillis();
- //方法2
- String join2 = getString2(longList);
- long endTime2 = System.currentTimeMillis();
- log.info("方法二耗时:数据量:{},耗时{}", longList.size(), (endTime2 - startTime2));
-
- long startTime3 = System.currentTimeMillis();
- //方法3
- String join3 = getString3(longList);
- long endTime3 = System.currentTimeMillis();
- log.info("方法三耗时:数据量:{},耗时{}", longList.size(), (endTime3 - startTime3));
-
-
- long startTime4 = System.currentTimeMillis();
- //方法4
- String join4 = getString4(longList);
- long endTime4 = System.currentTimeMillis();
- log.info("方法四耗时:数据量:{},耗时{}", longList.size(), (endTime4 - startTime4));
-
-
- long startTime5 = System.currentTimeMillis();
- //方法5
- String join5 = getString5(longList);
- long endTime5 = System.currentTimeMillis();
- log.info("方法四耗时:数据量:{},耗时{}", longList.size(), (endTime5 - startTime5));
-
- log.info("原始数据:{}",longList);
- log.info(join1);
- log.info(join2);
- log.info(join3);
- log.info(join4);
- log.info(join5);
- }
-
-
- //方法1
- public static String getString1(List<String> strList) {
- if (CollectionUtils.isEmpty(strList)) {
- return "";
- }
- return strList.stream().collect(Collectors.joining(","));
- }
-
- //方法2
- @NotNull
- private static String getString2(ArrayList<String> longList) {
- return StringUtils.collectionToCommaDelimitedString(longList);
- }
-
- //方法3
- private static String getString3(ArrayList<String> longList) {
- return org.apache.commons.lang3.StringUtils.join(longList, ",");
- }
-
-
- //方法4
- private static String getString4(ArrayList<String> longList) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < longList.size(); i++) {
- sb.append(i);
- if (i < longList.size() - 1) {
- sb.append(",");
- }
- }
- return String.valueOf(sb);
- }
-
-
- //方法5
- private static String getString5(ArrayList<String> longList) {
- return String.join(",", longList);
- }

话不多说,上运行结果
注意 方法一跟方法五,如果数组是其它类型的 还需要转成String类型才能使用,如下
longList.stream().map(a -> String.valueOf(a)).collect(Collectors.toList());
耗时对比
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四=方法五>方法二>方法三>>方法一
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四>=方法五>方法二>方法三>>方法一
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四=方法五>方法二>方法三>>方法一
结果:运行多次,其中方法五效率明显高于其它四种方法,方法二、方法三、方法四效率相差不大各有胜负,方法一效率最差远低于其它四种方法
结论:,方法五>方法二>=方法三>=方法四>>方法一
结果:运行多次,其中方法五效率依然高于其它四种方法,方法二、方法三、方法四效率比较接近 方法三略占优,方法一效率最差
结论:,方法五>=方法三>方法二>方法四>方法一
结果:运行多次,其中方法五效率依然高于其它四种方法,除了方法一,其它四种方法 计算数据量高了10倍,但耗时普遍增加了10---30倍,
结论:,方法五>方法一>>方法四=方法三>方法二
其它说明:如果是实时交互业务,当前响应时间已经影响用户体验
最后总结:方法五对于千万级别计算 远高于其它四种方式
String.join(",", longList)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。