J-13 常见对象
StringBuffer类
StringBuilder类
数组高级
Arrays类
StringBuffer类
概述
-
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题
-
线程安全的可变字符序列
-
效率与安全是矛盾的
安全 -- 同步 -- 数据是安全的
效率 -- 不同步 -- 数据是不安全的 -
StringBuffer与String的区别:
① 前者长度和内容可变,后者不可变
②如果是有前者进行字符串拼接,不会浪费太多的空间
构造方法
public StringBuffer() ,常用
无参构造方法
public StringBuffer(int capacity)
指定容量的字符串缓冲区对象
public StringBuffer(String str)
指定字符串内容的字符串缓冲区对象
成员方法
public int capacity()
返回当前容量,理论值。
public int length()
返回长度(字符数),实际值
添加功能
-
public StringBuffer append(String str)
可以把任意类型数据添加到字符串缓冲区里面,并返回子字符串缓冲区本身(可以采用链式编程)StringBuffer sb = new StringBuffer(); sb.append("hello").apend(true).append(12).append(34.56);
-
public StringBuffer insert(int offset,String str)
可以把任意类型数据添加到字符串缓冲区某一位置中
删除功能
- public StringBuffer deleteCharAt(int index)
删除指定位置的字符,并返回本身 - public StringBuffer delete(int start,int end)
删除从指定位置开始到指定位置结束的内容,并返回本身
(包左不包右)
全部删除,sb.delete(0, sb.length());
替换功能
- public StringBuffer replace(int start,int end,String str)
从start开始到end,用str替换(包左不包右)
反转功能
- public StringBuffer reverse()
字符串翻转。"abc"变为"cba"。
截取功能
- public String substring(int start)
返回值为String类型! - public String substring(int start,int end)
返回值为String类型!
StringBuffer与String的相互转换
- 为什么进行类之间的转换
A --> B的转换:为了使用B的功能
B --> A的转换:需要的结果是A类型,需要转回来
String 到 StringBuffer
-
通过构造方法
String s = "hello"; StringBuffer sb = new StringBuffer(s);
-
通过append()方法
StringBuffer sb2 = new StringBuffer(); sb2.append(s);
StringBuffer 到 String
-
通过构造方法
StringBuffer buffer = new StringBuffer("java"); String str = new String(buffer);
-
通过toString()方法
String str2 = buffer.toString();
StringBuffer和数组的区别
二者都可以看成是容器。
① StringBuffer的数据最终是一个字符串数据。
② 数组可以放置多种数据,但必须是同一种数据。
StringBuilder类
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
String、StringBuffer、StringBuilder的区别
① String是内容不可变的,而StringBuffer、StringBuilder是内容可变的;
② StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高。
数组高级
冒泡排序
规律:
① 相邻元素两两比较,大的往后放
② 每次比较完毕后,下一次比较的时候减少一个元素的比较
③ 总共需要比较数组长度-1次。
二分查找
思路:
- 定义最小索引,最大索引
- 计算出中间索引
- 中间索引值与要查找的元素进行比较。
① 相等
② 大了,在左边找
③ 小了,在右边找 - 重写获取最小索引或者最大索引
① 大了,max = mid -1;
② 小了,min = mid +1;
注意:
无序数组,不能采用二分查找。(改变了本身的索引值)
Arrays类
概述
针对数组进行操作的工具类。
无构造,全静态方法。
成员方法
public static String toString(int[] a)
把数组转成字符串
开发原则:只要是对象,就要先判断对象是否为null.
public static void sort(int[] a)
排序
底层是快速排序。
public static int binarySearch(int[] a,int key)
二分查找