java中有没有将一个字符串重复N次功能类或方法
发布时间:2025-05-21 10:31:44 发布人:远客网络
一、java中有没有将一个字符串重复N次功能类或方法
java字符串连接一般有三种方式:
StringBuffer是线程安全的; StringBuilder不是线程安全的,但性能稍好一些,在不需要线程安全的字符串连接,尽量使用StringBuilder。(大部分情况下都不需要线程安全)jdk1.5的编译器也是把+号编译成StringBuilder来连接字符串的。+号比想象中的智能,通过反编译发现,在某些情况下可以放心的使用+号连接字符串。
1、对于很长的字符串可以分开用+号连接,不会影响性能。
编译器会自动处理成: Strings="aabb";
2、一条语句中,可以放心使用+号连接,不会影响性能。
如: Stringa="a"+"a"; Strings="a"+"b"+a+"c"+5+"d";
Strings=newStringBuilder("ab").append(a).append("c").append(5).append("d").toString();
二、java判断数组中相同字符串的个数
1、先定义一个hashmap,用key存2006,2007等数组的内容,value存个数
2、比如:hashmap.set('2006',3);
3、然后用两个for循环遍历数组a,和冒泡法排序的道理是一样的.
4、只不过冒泡法比较的是大小,我们这里比较是否相等而已,如果相等按数组内容操作hashmap.
5、整个HashSet它本身不能接受重复的内容.
6、你遍历数据全部加入到hashset中,add方式如果返回true说明加入了,如果返回false说明有重复的了.这时候你判断下当前要加的值找个东西放进去就可以了
7、修改:如果真的要说效率的话,我说的第二种方法可以考虑下!
三、java中字符串类型多次赋值对内存是否有影响
1、 String str= new String("123");
2、你可以运行这段程序看看,内存是不会挂掉的。java内存回收很多时候是在内存不够的情况下才进行的,而且这个时候他不受你写的程序控制,哪怕是你在运行他照样可以启动,理由很简单,你的程序只是虚拟机上运行的一个程序,虚拟机只要把你的程序挂起就可以了,之后他就开始扫垃圾了,至于什么时候扫垃圾,那就看什么时候虚拟机觉得太脏了就会来打扫的,而且他也不会提前通知你的,某些时刻你也可以自己去通知他来扫垃圾,System.gc(),但是绝大多数时候你调用这个会导致你程序性能下降,原因在于虚拟机接到清楚后会直接强行把你的程序挂起来,所以的程序会短时间无法运行。而这和你本来的意图相反了,你本来想把垃圾扫掉运行更快,结果更慢。
3、字符串的优化上,虚拟机是做了特别处理的,首先有一个String池来进行缓冲,通过这个可以减少大量的重复内存的使用,你可以去查相关资料,我说一个最简单的,如果有池了26个字母就是26个字节,不管你有多少个人在使用这26个字符,只要是你通过池来使用它就是26个字节。当然你不通过池子就外话了。
4、还有通常String是可以使用加号直接来进行加法的,表面下看这种写法是浪费性能,但是虚拟机在编译的时候会自己进行优化,会把String,用可变字符串来进行操作。