只作为个人笔记
String本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。string操作示意图如图1所示
image
而StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。StringBuilder操作示意图如图2所示。
image
当程序中需要大量的对某个字符串进行操作时,应该考虑应用StringBuilder类处理该字符串,其设计目的就是针对大量string操作的一种改进办法,避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用string类即可。
二叉树后序遍历的几种思路
//递归
public void dfs(TreeNode root, List<Integer> list){
if(root.left != null)dfs(root.left, list);
if(root.right != null)dfs(root.right, list);
list.add(root.val);
}
//先序遍历的反转即得到后序遍历
public void dfs(TreeNode root, List<Integer> list){
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
TreeNode node;
while (!stack.empty()){
node = stack.pop();
list.add(node.val);
if(node.left != null)stack.push(node.left);
if(node.right != null) stack.push(node.right);
}
Collections.reverse(list);//list的反转、
}
Java中字符串比较,三种方式的区别
三种方式分别是:compareTo、“==”、equals
1.compareTo比较字符串中 字符 的大小:
比较两个字符串,并返回一个int类型。若字符串等于参数字符串、则返回0,字符串小于参数字符串、则返回值小于0,字符串大于参数字符串、返回值大于0。
package com.de.test;
/**
* Java字符串比较大小
*/
public class StringA {
public static void main(String[] args){
String str = "String";
String anotherStr = "string";
Object objstr = str;
System.out.println(str.compareTo(anotherStr));
System.out.println(str.compareToIgnoreCase(anotherStr));
System.out.println(str.compareTo(objstr.toString()));
}
}
//返回结果:
-32
0
0
- equals(),“==”
使用equals()和==,区别在于equals比较的是内容是否相等、==比较的是引用的变量地址是否相等。
package com.de.test;
public class StringA {
public static void main(String[] args){
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s1:" + s1);
System.out.println("s2:" + s2);
System.out.println("s3:" + s3);
System.out.println("s4:" + s4);
System.out.println("----------比较内容是否相等---------------");
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s4));
System.out.println("----------比较引用地址是否相等---------------");
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
}
}
//结果:
s1:hello
s2:hello
s3:hello
s4:hello
----------比较内容是否相等---------------
true
true
true
----------比较引用地址是否相等---------------
true
false
false