当前位置: 首页 > news >正文

Java中数组(一维/二维)与字符串操作(String/StringBuilder/StringBuffer)详解

​一、数组​

数组是存储相同类型数据的容器,支持固定大小的数据集合。


​1. 一维数组​

​1.1 声明与初始化​

 

java

复制

// 声明
int[] arr1;          
int arr2[];          // 初始化
int[] arr3 = new int[5];         // 默认值为0
int[] arr4 = {1, 2, 3, 4, 5};    // 直接赋值

​1.2 访问与操作​

 

java

复制

// 访问元素
int first = arr4[0];  // 1
int last = arr4[arr4.length - 1];  // 5// 遍历数组
for (int i = 0; i < arr4.length; i++) {System.out.print(arr4[i] + " ");  // 1 2 3 4 5
}// 数组复制
int[] copyArr = Arrays.copyOf(arr4, arr4.length);

​1.3 多维数组(二维数组)​

 

java

复制

// 声明与初始化
int[][] matrix = new int[3][3];  // 3x3二维数组
int[][] jagged = {{1}, {2, 3}, {4, 5, 6}};  // 不规则二维数组// 遍历二维数组
for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print(matrix[i][j] + " ");}System.out.println();
}// 使用Arrays工具类
int[][] deepCopy = Arrays.copyOf(matrix, matrix.length);
System.out.println(Arrays.deepToString(jagged));  // [[1], [2, 3], [4, 5, 6]]

​2. 数组常见操作​
​操作​​代码示例​​说明​
数组排序Arrays.sort(arr4);对数组升序排序
数组填充Arrays.fill(arr3, 10);将数组所有元素设为10
数组复制System.arraycopy(src, 0, dest, 0, len);深拷贝数组
数组转字符串Arrays.toString(arr4)[1, 2, 3, 4, 5]

​二、字符串操作​

字符串是字符序列,Java提供了三种处理方式:String(不可变)、StringBuilder(可变,非线程安全)、StringBuffer(可变,线程安全)。


​1. String类​

​1.1 不可变性​

 

java

复制

String str = "Hello";
str += " World";  // 实际创建新对象,原"Hello"可能被回收
System.out.println(str);  // Hello World

​1.2 常用方法​

 

java

复制

String s1 = "Java";
String s2 = "java";// 字符串比较
System.out.println(s1.equals(s2));       // false(区分大小写)
System.out.println(s1.equalsIgnoreCase(s2)); // true// 子串操作
System.out.println(s1.substring(0, 2));  // Ja// 拼接与替换
System.out.println(s1.concat(" Programming"));  // Java Programming
System.out.println(s1.replace('a', 'o'));       // Jovo

​1.3 字符串池(String Pool)​

 

java

复制

String a = "Hello";
String b = "Hello";
System.out.println(a == b);  // true(指向同一对象)String c = new String("Hello");
System.out.println(a == c);  // false(堆内存中新对象)

​2. StringBuilder类​

​2.1 可变性​

 

java

复制

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");  // 直接修改原对象
System.out.println(sb);  // Hello World

​2.2 性能优势​

 

java

复制

// 使用String拼接(低效)
String str = "";
for (int i = 0; i < 1000; i++) {str += i;  // 每次生成新对象
}// 使用StringBuilder(高效)
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 1000; i++) {sb2.append(i);  // 直接修改
}

​2.3 常用方法​

 

java

复制

sb.reverse();       // 反转字符串
sb.insert(5, ",");  // 在索引5插入逗号
sb.delete(0, 5);    // 删除0到5的字符

​3. StringBuffer类​

​3.1 线程安全​

 

java

复制

// 多线程环境下安全操作
StringBuffer sbf = new StringBuffer();
Runnable task = () -> {for (int i = 0; i < 100; i++) {sbf.append(i);}
};Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(sbf.length());  // 200(无数据竞争)

​3.2 性能差异​

  • StringBuffer 方法加锁,线程安全但性能较低。
  • StringBuilder 无锁,单线程下性能更高。

​三、对比与总结​
​特性​​String​​StringBuilder​​StringBuffer​
​可变性​不可变可变可变
​线程安全​是(不可变天然安全)
​性能​低效(频繁创建新对象)高效中等(锁开销)
​适用场景​字符串不修改单线程频繁修改多线程频繁修改

​四、综合示例​
 

java

复制

public class StringDemo {public static void main(String[] args) {// String不可变性String s = "A";s += "B";System.out.println(s);  // AB// StringBuilder高效拼接StringBuilder sb = new StringBuilder();for (int i = 0; i < 5; i++) {sb.append(i);}System.out.println(sb);  // 01234// StringBuffer线程安全StringBuffer sbf = new StringBuffer();new Thread(() -> {for (int i = 0; i < 5; i++) {sbf.append(i);}}).start();new Thread(() -> {for (int i = 5; i < 10; i++) {sbf.append(i);}}).start();// 最终结果可能是0123456789(顺序不确定,但无数据错误)}
}

​关键点总结​

  1. ​数组​​:固定大小,适合存储有序数据,多维数组可嵌套。
  2. ​String​​:不可变,适合常量字符串,避免频繁修改。
  3. ​StringBuilder​​:单线程高效修改,推荐大多数场景。
  4. ​StringBuffer​​:多线程安全修改,性能略低但可靠。

相关文章:

  • mysql中的索引怎么用?
  • 高压单端探头,如何实现大比例的衰减?
  • 在thinkphp5.0中。单表使用 model clone 时就会有问题。 需要使用 alias(), 否则会报错。
  • 网络协议:[0-RTT 认证 ]
  • 一起学数据结构和算法(二)| 数组(线性结构)
  • VMware-MySQL主从
  • 板凳-------Mysql cookbook学习 (七)
  • 2025上半年软考高级系统架构设计师经验分享
  • Elasticsearch索引机制与Lucene段合并策略深度解析
  • 【QT】在QT6中读取文件的方法
  • 鸿蒙OSUniApp 实现的数字键盘与密码输入框组件#三方框架 #Uniapp
  • 一起学数据结构和算法(三)| 字符串(线性结构)
  • 人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理
  • C++(初阶)(二十)——封装实现set和map
  • 每日算法-250527
  • 路桥隧养护决策系统
  • 小黑黑大模型应用日常摸索中:初次使用langchain智能体调用工具,准备继续深入
  • UE源代码——径向爆炸伤害计算函数(Grenade手雷爆炸功能)
  • 【LLM】模型上下文协议(MCP)详解
  • 在 Vue + Vite 项目中,直接使用相对路径或绝对路径引用本地图片资源时,图片无法正确显示。
  • 学校网站建设介绍/互联网营销的方式有哪些
  • 下班后做兼职任务网站/关键词在线听免费
  • 如皋做网站/优化网站的目的
  • 企业网站备案资料填写单/怎么注册自己的网站域名
  • 中国建设网官方网站下载e路最新版官方/seo 优化技术难度大吗
  • 佛山网站建设咨询/南宁 百度网盘