学习笔记
- String、StringBuilder、StringBuffer 的区别
类 可变性 线程安全 效率
String 不可变 安全 低(频繁拼接会生成新对象)
StringBuilder 可变 不安全 高(单线程推荐)
StringBuffer 可变 安全(加 synchronized ) 中(多线程推荐)
java
public class StringTest {
public static void main(String[] args) {
// String 不可变,每次拼接产生新对象
String str = "a";
str += "b";
str += "c";
System.out.println(str);
// StringBuilder 单线程,高效拼接
StringBuilder sb = new StringBuilder();
sb.append("a").append("b").append("c");
System.out.println(sb.toString());
// StringBuffer 多线程安全,带同步锁
StringBuffer sbf = new StringBuffer();
sbf.append("a").append("b").append("c");
System.out.println(sbf.toString());
}
}
- ArrayList 和 LinkedList 的区别
- ArrayList :基于动态数组实现- 优点:随机访问快( get(i) 直接定位)
- 缺点:增删元素慢(需要移动元素)
- LinkedList :基于双向链表实现- 优点:增删元素快(只需修改指针)
- 缺点:随机访问慢(需要遍历查找)
使用场景:
- 多查询、少增删 → 用 ArrayList
- 多增删、少查询 → 用 LinkedList
java
import java.util.ArrayList;
import java.util.LinkedList;
public class ListTest {
public static void main(String[] args) {
// ArrayList 数组,查询快
ArrayList
arrayList.add("Java");
arrayList.add("Blog");
System.out.println(arrayList.get(0));
// LinkedList 双向链表,首尾增删快
LinkedList
linkedList.addFirst("Head");
linkedList.addLast("Tail");
System.out.println(linkedList.getFirst());
}
}

浙公网安备 33010602011771号