当我偶然发现这篇文章时,我有类似的要求。 我想要一种快速的方法来构建一个可以从双方增长的字符串,即。 在正面和背面任意添加新字母。 我知道这是一篇很老的帖子,但它激发了我尝试创建字符串的几种方法,我想我会分享我的发现。 我也在使用一些Java 8构造,它可以优化案例4和5的速度。

[https://gist.github.com/SidWagz/e41e836dec65ff24f78afdf8669e6420]

上面的要点有详细的代码,任何人都可以运行。我在这方面采取了几种方法来增长; 1)附加到StringBuilder,2)插入StringBuilder的前面,如@Mehrdad所示,3)从StringBuilder的前面和末尾部分插入,4)使用列表从末尾追加,5)使用Deque来 从前面追加。

// Case 2

StringBuilder build3 = new StringBuilder();

IntStream.range(0, MAX_STR)

.sequential()

.forEach(i -> {

if (i%2 == 0) build3.append(Integer.toString(i)); else build3.insert(0, Integer.toString(i));

});

String build3Out = build3.toString();

//Case 5

Deque deque = new ArrayDeque<>();

IntStream.range(0, MAX_STR)

.sequential()

.forEach(i -> {

if (i%2 == 0) deque.addLast(Integer.toString(i)); else deque.addFirst(Integer.toString(i));

});

String dequeOut = deque.stream().collect(Collectors.joining(""));

我将专注于前面附加的情况,即。 情况2和案例5. StringBuilder的实现在内部决定内部缓冲区如何增长,除了在前端附加限制速度的情况下从左到右移动所有缓冲区。 直接插入StringBuilder前面所花费的时间增长到非常高的值,如@Mehrdad所示,如果需要只有长度小于90k字符的字符串(仍然很多),前插入将 构建一个String,同时通过在末尾附加来构建相同长度的String。 我所说的是时间惩罚确实会被踢出并且是巨大的,但只有当你必须构建非常庞大的字符串时。 可以使用双端队列并在末尾连接字符串,如我的示例所示。 但是StringBuilder的读取和编码更直观,对于较小的字符串,惩罚也无关紧要。

实际上,案例2的表现要比案例1快得多,我似乎并不理解。 我假设StringBuilder中内部缓冲区的增长在前加法和后加法的情况下是相同的。 我甚至将最小堆设置为非常大的数量,以避免延迟堆增长,如果这会起到作用。 也许有更好理解的人可以在下面评论。

java在字符串开头添加字符串_string - java:使用StringBuilder在开头插入相关推荐

  1. 连字符在java中怎么表示_如何在字符串之间添加连字符 - java

    我有以下字符串xxxxx,我想添加x-xxxx之类的连字符,如何使用Java? 参考方案 您可以使用String#substring(). String newstring = string.subs ...

  2. java list 在头部添加6_【Java提高十六】集合List接口详解

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  3. python字符串后面添加字符串_什么是字符串?怎样在Python中添加字符串?

    字符串是一种表示文本的数据类型,字符串中的字符可以是ASCII字符.各种符号以及各种Unicode字符.Python中的字符串有如下三种表现方式. 第1种方式:使用单引号包含字符.示例代码如下: 'a ...

  4. java怎么给框架添加背景图,java里怎么给Container添加背景图片

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public Frame1() { try { setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); } ...

  5. java中为按钮添加图片_如何在Java中为字符串添加双引号?

    java中为按钮添加图片 In Java, everything written in double-quotes is considered a string and the text writte ...

  6. IPHONE 开发 7 -- Object C 02 字符串NSString 与 char* ,字符串的遍历,字符串的比较,截取与大小写改变,搜索字符串与替换字符串...

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  7. java类对象转化成字符串_String类型字符串(xml格式)转换成java对象类型

    使用到的包: 1. 2. 将字符串类型的字符串转换成的Java的对象时,需要先将字符的格式转换成JSON格式的字符串(所以用到了json.jar包),在使用JSON格式的字符串转换成的Java的对象类 ...

  8. java正则表达式不以某个字符串开头或结尾

    Cooking Regex微信公众号 正则表达式学习 一.不以某个字符串开头 这个问题我们可以用 "否定式向前匹配"来实现,语法 (?!str),表示后面不是接str才匹配前面的字 ...

  9. Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...

    本问题已经有最佳答案,请猛点这里访问. 我有两个String s,str1和str2. 如何检查str1是否包含在str1中,忽略大小写? indexOf和contains都是逐个字符的,所以如果你需 ...

最新文章

  1. 【Kali渗透全方位实战】Linux终端和基本Linux命令terminator
  2. 数据结构与算法(3)——树(二叉、二叉搜索树)
  3. 青少年蓝桥杯_2020_steam考试_中级组_第一题
  4. 如何让context attribute不出现在configuration界面的available fields列表内
  5. erlang odbc mysql参数_Erlang在Redhat 5.3下使用unixODBC连接Oracle数据库的配置
  6. Oracle Recursive Calls 说明
  7. 那些年我们看不懂的论文
  8. C++ mmap 多进程文件读写
  9. 百旺智能编码_还在为选择开票编码烦恼吗?“智能编(赋)码”轻松帮您搞定!...
  10. 社交仅发送图片和视频 -设计测试用例
  11. kubernetes面试题汇总
  12. FreeRTOS下开启fatfs文件重入功能后,“Error:..\..\FreeRTOS\src\queue.c,1248“报错问题解决
  13. 达人评测 i7 11390h和i5 11320h选哪个好
  14. 在python里是什么意思_在Python中$是什么意思?
  15. JAVA中随机数的选取方法
  16. 《计算机组成原理》第五章指令系统 部分课后习题答案 清华大学出版_秦磊华_谭志虎
  17. Solaris 中文命令
  18. android中dalvik虚拟机参数
  19. ae稳定不能获取动态服务器,ae 获取动态链接服务器超时
  20. 个人简历(java基础入门)

热门文章

  1. 工业相机之镜头基础知识
  2. 达里奥:我阅人无数,没有一个成功人士天赋异禀 |【经纬低调分享】
  3. 全面解读Java线程池的工作原理
  4. 网络安全小白成长日记
  5. 认知升级篇:为什么我们一定要掌握自学能力?
  6. 贪心算法背包问题java
  7. INFOR WMS UI重构
  8. SpringBoot+MyBatis(动态数据源/分布式事务XA(Atomikos))
  9. Xposed精品连载 | 一篇文章彻底搞定安卓刷机与Root
  10. Nature Neuroscience综述:网络神经系统中的动态表征