14、Java常用类(StringBuffer)、排序算法(冒泡排序、选择排序、插入排序、快速排序)、查找算法(二分查找)
2021-02-01 03:17
标签:star tin stringbu world val 最大 last 字符 ack 统计大串中小串出现的次数(新的解决方案) 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。线程安全的可变长度的字符序列 容量在初始化完毕(构造方法执行完)后已经确定 insert相比append的区别:append是在字符串后面插入,而insert是在index位置插入,在参数中需要指明要插入的位置,插入数值的类型二者一致。 String ---> StringBuffer StringBuffer ---> String 挖坑填数法完成比基准值小的放到基准值左侧,大于等于基准值的放到基准值右侧。 前提数组元素必须有序 14、Java常用类(StringBuffer)、排序算法(冒泡排序、选择排序、插入排序、快速排序)、查找算法(二分查找) 标签:star tin stringbu world val 最大 last 字符 ack 原文地址:https://www.cnblogs.com/shawnyue-08/p/12814339.htmlclass MyTest {
public static void main(String[] args) {
String source = "woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
String target = "java";
int length = source.length();
String replace = source.replace(target, "");
int length1 = replace.length();
int count = (length - length1) / 4;
System.out.println(count);
}
}
//截取字符串
class Test {
public static void main(String[] args) {
String str="woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
int count =0;
int index = str.indexOf("java");
while (index != -1) {
count++;
str = str.substring(index + 4);
index = str.indexOf("java");
}
System.out.println(count);
}
}
StringBuffer类
String s = "aaa" + "bbb" + "ccc";
//像这种拼串,实际上只创建一个字符串对象
StringBuffer类的概述
StringBuffer的构造函数
StringBuffer()
构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer(int capacity)
构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer(String str)
构造一个初始化为指定字符串内容的字符串缓冲区。
class StringBuffer {
public StringBuffer() {
super(16);
}
public StringBuffer(int capacity) {
super(capacity);
}
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
}
abstract class AbstractStringBuilder {
char[] value;
int count;
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
}
package org.westos.demo;
/**
* @author lwj
* @date 2020/4/30 13:48
*/
public class MyTest {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer();
//初始容量16个字符
int capacity = s1.capacity();
System.out.println(capacity);
//16,value.length,数组理论存储的最大容量
System.out.println(s1.length());
//0
//count变量,实际字符数
StringBuffer s2 = new StringBuffer(10);
System.out.println(s2.capacity());
//10
System.out.println(s2.length());
//0
StringBuffer s3 = new StringBuffer("Hello");
System.out.println(s3);
//Hello
System.out.println(s3.capacity());
//21
//value = new char[str.length + 16] = new char[5 + 16] = new char[21]
//字符数组的预设长度
System.out.println(s3.length());
//5
//count,字符数组中实际存储的长度
s3.append("World");
System.out.println(s3.capacity());
//21
//5 + 5 不足以达到扩容的条件,所以capacity数组的容量不会改变
StringBuffer s4 = new StringBuffer("Hello World, Hello Java");
System.out.println(s4.length());
//23
System.out.println(s4.capacity());
//39 = value.length + 16 = 23 + 16 = 39
s4.append("Hello DataStructure.");
System.out.println(s4.capacity());
//80
//扩容机制:int newCapacity = (value.length 39,必然要进行扩容
}
}
StringBuffer的添加功能
package org.westos.demo;
/**
* @author lwj
* @date 2020/4/30 16:53
*/
public class MyDemo {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Hello");
s1.append(1);
//int
s1.append(2L);
//long
s1.append(‘W‘);
//char
s1.append(3.0);
//double
s1.append(2.5f);
//float
s1.append(true);
//boolean
s1.append(new char[]{‘a‘, ‘b‘, ‘c‘});
//char[]
s1.append("ABC");
//String
s1.append(new StringBuffer("Java"));
//StringBuffer
s1.append(new Object());
//Object
s1.append(new char[]{‘d‘, ‘e‘, ‘f‘}, 1, 2);
//char[], int offset, int len ef
s1.append("ShawnYue", 1, 5);
//String, int offset, int end hawn
System.out.println(s1.toString());
//Hello12W3.02.5trueabcABCJavajava.lang.Object@1b6d3586efhawn
}
}
package org.westos.demo;
/**
* @author lwj
* @date 2020/4/30 16:59
*/
public class Test {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Hello");
s1.insert(0, 1);
//int offset, int i
s1.insert(0, 2L);
s1.insert(0, ‘W‘);
s1.insert(0, 3.0);
s1.insert(0, 2.5f);
s1.insert(0, true);
s1.insert(0, new char[]{‘a‘, ‘b‘, ‘c‘});
s1.insert(0, "Java");
s1.insert(0, new Object());
s1.insert(0, new char[]{‘d‘, ‘e‘, ‘f‘}, 0, 3);
s1.insert(0, "ShawnYue", 0, 8);
System.out.println(s1.toString());
//ShawnYuedefjava.lang.Object@1b6d3586Javaabctrue2.53.0W21Hello
System.out.println(s1);
//ShawnYuedefjava.lang.Object@1b6d3586Javaabctrue2.53.0W21Hello
}
}
StringBuffer的删除功能
package org.westos.demo;
/**
* @author lwj
* @date 2020/4/30 17:11
*/
public class Demo {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Hello World, Hello Java.");
s1.deleteCharAt(5);
System.out.println(s1);
//HelloWorld, Hello Java.
s1.deleteCharAt(11);
System.out.println(s1);
//HelloWorld,Hello Java.
s1.deleteCharAt(16);
System.out.println(s1);
//HelloWorld,HelloJava.
s1.delete(0, 5);
System.out.println(s1);
//World,HelloJava.
//[start, end)
}
}
StringBuffer的替换和反转功能
package org.westos.demo1;
/**
* @author lwj
* @date 2020/4/30 17:26
*/
public class MyTest {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Hello World");
s1.replace(0, 6, "Hi");
System.out.println(s1);
//HiWorld
//[start,end)
s1.reverse();
System.out.println(s1);
//dlroWiH
}
}
StringBuffer的截取功能
package org.westos.demo1;
/**
* @author lwj
* @date 2020/4/30 17:31
*/
public class MyDemo {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Hello World");
String substring = s1.substring(0);
System.out.println(substring);
//Hello World
//[start, length]
//substring的返回值类型为String
String substring1 = s1.substring(0, 4);
System.out.println(substring1);
//Hell
//[start, end)
System.out.println(s1);
//Hello World
//substring不会影响原有的StringBuffer
}
}
StringBuffer的查找功能
package org.westos.demo1;
/**
* @author lwj
* @date 2020/5/1 10:59
*/
public class MyDemo2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("HelloWorld,HelloJava");
int i = sb.indexOf("Hello");
System.out.println(i);
//0
//indexOf(String str)
int j = sb.indexOf("Hello", 5);
System.out.println(j);
//11
//indexOf(String str, int fromIndex)
int m = sb.lastIndexOf("Hello");
System.out.println(m);
//11
//lastIndexOf(String str)
int n = sb.lastIndexOf("Hello", 10);
System.out.println(n);
//0
//lastIndexOf(String str, int fromIndex)
}
}
StringBuffer和String的相互转换
package org.westos.demo1;
/**
* @author lwj
* @date 2020/4/30 17:38
*/
public class Test {
public static void main(String[] args) {
//String ---> StringBuffer
StringBuffer s1 = new StringBuffer("Hello World");
s1.append("Hello Java");
//append的返回值类型为StringBuffer
//StringBuffer ---> String
String s2 = new String(s1);
String substring = s1.substring(0);
String s3 = s1.toString();
String s4 = String.valueOf(s1);
}
}
把数组转为字符串
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
输出结果:
"[1, 2, 3]"
package org.westos.demo1;
/**
* @author lwj
* @date 2020/4/30 17:40
*/
public class Demo {
public static void main(String[] args) {
int[] array = {1, 2, 3};
StringBuffer s = new StringBuffer("[");
for (int i = 0; i
字符串反转
需求:把字符串反转
举例:键盘录入"abc"
输出结果:"cba"
package org.westos.demo2;
/**
* @author lwj
* @date 2020/4/30 17:43
*/
public class MyTest {
public static void main(String[] args) {
String s = "abc";
String s1 = new StringBuffer(s).reverse().toString();
System.out.println(s1);
//cba
}
}
StringBuffer和StringBuilder的区别
它们两个的API是相同的。
区别是线程安全方面。
StringBuffer是线程安全的,效率低;
StringBuild是线程不安全的,效率高。
String和StringBuffer分别作为参数传递
package org.westos.demo2;
/**
* @author lwj
* @date 2020/5/1 11:25
*/
public class MyDemo {
public static void main(String[] args) {
String str = "abc";
//引用类型作为参数传递,传递的是地址
//字符串虽然是引用类型,但是它作为参数传递的是值,不会改变值
change(str);
System.out.println(str);
//abc
}
public static void change(String str) {
str += "def";
System.out.println(str);
//abcdef
}
}
class Demo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abc");
change(sb);
System.out.println(sb);
//abcdef
}
public static void change(StringBuffer sb) {
sb.append("def");
System.out.println(sb);
//abcdef
}
}
数组
数组的冒泡排序
package org.westos.demo;
import java.util.Arrays;
/**
* 冒泡排序
* @author lwj
* @date 2020/4/30 18:03
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
boolean flag = false;
for (int i = 0; i arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
System.out.println(Arrays.toString(arr));
//[13, 24, 57, 69, 80]
//优化:如果在一次遍历中没有交换,那么可以提前结束
}
}
数组的选择排序
package org.westos.demo;
import java.util.Arrays;
/**
* @author lwj
* @date 2020/5/1 13:28
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
for (int i = 0; i
数组的插入排序
package org.westos.demo;
import java.util.Arrays;
/**
* @author lwj
* @date 2020/5/1 13:39
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
for (int i = 1; i 0 && temp
数组的快速排序
package org.westos.demo;
import java.util.Arrays;
/**
* @author lwj
* @date 2020/5/1 15:39
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
ArraysUtil.quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
//[13, 24, 57, 69, 80]
}
}
class ArraysUtil {
public static void quickSort(int[] arr, int start, int end) {
if (start pivot) {
j--;
}
if (i
二分查找
package org.westos.demo;
/**
* @author lwj
* @date 2020/5/1 14:27
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {12, 21, 23, 45, 58};
int target = 58;
int left = 0;
int right = arr.length - 1;
while (left
上一篇:浅析JAVA中栈内存和堆内存
下一篇:Python基础之装饰器
文章标题:14、Java常用类(StringBuffer)、排序算法(冒泡排序、选择排序、插入排序、快速排序)、查找算法(二分查找)
文章链接:http://soscw.com/index.php/essay/49333.html