stringbuilder

44个Java性能优化

泪湿孤枕 提交于 2019-12-02 22:58:23
44个Java性能优化 首先,代码优化的目标是: 减小代码的体积 提高代码运行效率 代码优化细节 1 .尽量指定类、方法的final修饰符 ​ 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2. 尽量使用对象 ​ 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。 3.尽可能使用局部变量 ​ 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 4.及时关闭流 ​ Java编程过程中,进行数据库连接、I/O流操作时务必小心

Java StringBuffer 和 StringBuilder 类

我是研究僧i 提交于 2019-12-02 22:41:23
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。 Test.java 文件代码: public class Test { public static void main ( String args [ ] ) { StringBuffer sBuffer = new StringBuffer ( " 菜鸟教程官网: " ) ; sBuffer . append ( " www " ) ; sBuffer . append ( " .runoob " ) ; sBuffer . append ( " .com " ) ; System . out . println ( sBuffer ) ; } }

DataTable根据字段去重

匿名 (未验证) 提交于 2019-12-02 22:10:10
DataTable根据字段去重 public static DataTable DistinctSomeColumn(DataTable sourceTable, params string[] fieldName) { DataTable dt2 = sourceTable.Clone(); DataView v1 = dt2.DefaultView; StringBuilder filter = new StringBuilder(); foreach (DataRow row in sourceTable.Rows) { for (int i = 0; i < fieldName.Length; i++) { filter.AppendFormat("{0}='{1}'", fieldName[i], row[fieldName[i]].ToString().TrimEnd()); if (i < fieldName.Length - 1) { filter.Append(" and "); } } v1.RowFilter = filter.ToString(); if (v1.Count > 0) { filter = new StringBuilder(); continue; } dt2.Rows.Add(row.ItemArray); filter = new

C# 2进制、8进制、10进制、16进制...各种进制间的转换(二)

匿名 (未验证) 提交于 2019-12-02 22:06:11
/// <summary> /// 十进制转换为二进制 /// </summary> /// <param name="x"></param> /// <returns></returns> public static string DecToBin(string x) { string z = null; int X = Convert.ToInt32(x); int i = 0; long a, b = 0; while (X > 0) { a = X%2; X = X/2; b = b + a*Pow(10, i); i++; } z = Convert.ToString(b); return z; } /// <summary> /// 16进制转ASCII码 /// </summary> /// <param name="hexString"></param> /// <returns></returns> public static string HexToAscii(string hexString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i <= hexString.Length - 2; i += 2) { sb.Append( Convert.ToString( Convert

How does reduce() method work with parallel streams in Java 8?

懵懂的女人 提交于 2019-12-02 21:59:56
问题 I try to understand how reduce() method works exactly with parallel streams and I don't understand why the following code do not return the concatenation of these strings. This is the code: public class App { public static void main(String[] args) { String[] grades = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"}; StringBuilder concat = Arrays.stream(grades).parallel() .reduce(new StringBuilder(), (sb, s) -> sb.append(s), (sb1, sb2) -> sb1.append(sb2)); System.out.println(concat); }

关于Java代码优化的44条建议!

匿名 (未验证) 提交于 2019-12-02 21:53:52
关于Java代码优化的N条建议! 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对。在机械工艺发展的今天,服务器动辄8核、16核,64位CPU,代码执行效率非常高,StringBuilder替换StringBuffer、ArrayList替换Vector,对于代码运行效率的提升是微乎其微的,即使是项目中的每个点都注意到了,代码运行也看不出什么明显的变化。 我认为,代码优化的最重要的作用应该是:避免未知的错误。在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因。然而为了解决这个错误,我们需要先自验证、再打包出待替换的class文件、暂停业务并重启,对于一个成熟的项目而言,最后一条其实影响是非常大的,这意味着这段时间用户无法访问应用。因此,在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降低了工作量。 一、代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 本文的内容有些来自网络

java中stringBuilder的用法

匿名 (未验证) 提交于 2019-12-02 21:53:52
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 在 StringBuilder 上的主要操作是 append 和 insert 方法 ,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。 append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。 例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append(“le”) 将使字符串生成器包含“startle”,而 z.insert(4, “le”) 将更改字符串生成器,使之包含“starlet”。 通常, 如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果 。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。 将

Java中的String、StringBuilder、StringBuffer三者的区别

匿名 (未验证) 提交于 2019-12-02 21:53:52
Java中的String、StringBuilder、StringBuffer三者的区别 在刚开始学习的时候,对于性能啥的完全不了,一般字符串操作都是String直接加加减减,觉得能完成功能完成就好了。然后考虑到找工作了,看了点面经发现有可能会问到一些相关的问题,了解了一些。后面看了点关于虚拟机的知识,慢慢对String类型如何实现和底层是怎么样的产生了兴趣。找个机会总结一下 这篇文章的内容基本参考自网络,添加了一些自己的想法。 首先,这三者必定是Java处理String的类。那么区别是什么呢? 先简单来说,处理的效率上:StringBuilder > StringBuffer > String 线程安全来说,StringBuilder处理数据是非线程安全的,而StringBuffer是线程安全的。这点主要是从源码的角度来说的。他们两者的区别类似于HashMap和HashTable。在StringBuffer中的方法基本都是有Synchronized 关键字标记,适合在多线程环境中使用,当然因为这样,所以处理效率上比不上StringBuilder。 1、String类 展开一下String类,String类在Java中是不可变类,不可变指的是任何对String类型的改变都基本上是创建一个新的String对象,然后将这个新的对象的引用传递回来,这个步骤由JVM实现

字符串连接之“+”和append

匿名 (未验证) 提交于 2019-12-02 21:52:03
在解决这个问题之前,需要了解的内容: 1、String是只读字符串,即String引用的字符串内容是不可改变的。 1 String s1 = "abc"; 2 s1 = "def"; //“abc”并没有改变,只是s1的指向改变了,原来的“abc”字符串变为了一个不可及对象 2、 StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改。 3、 StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的, 因为它的所有方法都没有被 synchronized 修饰,因此它的效率理论上也比 StringBuffer效率高。 接下来进入正题,解决效率的问题: 1 String s = "abc" + "def"; 上面的代码在一般的开发中会被常常用到,但是这样做好不好,当然也不能简单的说好或者不好。分情况来看: 1、从效果上来看,两者是完全等效的。如果需要拼接的字符串并不是很多,可以使用“+”,因为代码量少,例如上面的代码。 2、从运行效率和资源消耗方面来讲,两者存在着很大的区别。 来看一段代码: 1 String s = ""; 2 Random r = new Random(); 3 for (int i = 0;i < 10;i++) { 4 s = s + r.nextInt

Java字符串拼接新方法 StringJoiner

匿名 (未验证) 提交于 2019-12-02 21:52:03
Java中如何输出像1-2-3-4-5 这样的字符 抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8 StringJoiner sj = new StringJoiner ( "-" , "" , "" ); sj . add ( "1" ). add ( "1" ). add ( "2" ); String desiredString = sj . toString (); 在1.8版本中新加了 一个’StringJoiner‘ 方法 StringJoiner是java.util包中的一个类,用于构造一个由分隔符分隔的字符序列(可选),并且可以从提供的前缀开始并以提供的后缀结尾。 虽然这也可以在StringBuilder类的帮助下在每个字符串之后附加分隔符,但StringJoiner提供了简单的方法来实现,而无需编写大量代码 关于StringJoiner的详细介绍大家可以去看看这位仁兄的博客 写的很好这里我就不过多阐述了 https://www.hollischuang.com/archives/3283 来源:博客园 作者: 飞鸟 链接:https://www.cnblogs.com/hwcs/p/11465141.html