@Test public void listToString() { ArrayList 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 strList) { if (CollectionUtils.isEmpty(strList)) { return ""; } return strList.stream().collect(Collectors.joining(",")); } //方法2 @NotNull private static String getString2(ArrayList longList) { return StringUtils.collectionToCommaDelimitedString(longList); } //方法3 private static String getString3(ArrayList longList) { return org.apache.commons.lang3.StringUtils.join(longList, ","); } //方法4 private static String getString4(ArrayList 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 longList) { return String.join(",", longList); }
话不多说,上运行结果
注意 方法一跟方法五,如果数组是其它类型的 还需要转成String类型才能使用,如下
longList.stream().map(a -> String.valueOf(a)).collect(Collectors.toList());
耗时对比
数量级 百
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四=方法五>方法二>方法三>>方法一
数量级 千
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四>=方法五>方法二>方法三>>方法一
数量级 万
结果:运行多次五种方式每次运行结果耗时相差不大
结论:运行多次效率比方法四=方法五>方法二>方法三>>方法一
数量级 十万
结果:运行多次,其中方法五效率明显高于其它四种方法,方法二、方法三、方法四效率相差不大各有胜负,方法一效率最差远低于其它四种方法
结论:,方法五>方法二>=方法三>=方法四>>方法一
数量级 百万
结果:运行多次,其中方法五效率依然高于其它四种方法,方法二、方法三、方法四效率比较接近 方法三略占优,方法一效率最差
结论:,方法五>=方法三>方法二>方法四>方法一
数量级 千万
结果:运行多次,其中方法五效率依然高于其它四种方法,除了方法一,其它四种方法 计算数据量高了10倍,但耗时普遍增加了10---30倍,
结论:,方法五>方法一>>方法四=方法三>方法二
其它说明:如果是实时交互业务,当前响应时间已经影响用户体验
最后总结:方法五对于千万级别计算 远高于其它四种方式
String.join(",", longList)
来源地址:https://blog.csdn.net/qq_35939148/article/details/131495097