概述
- stringbuffer 线程安全可变字符序列
- string不可变
- stringbuffer 可变
- stringbuilder 单线程 慢
StringBuffer的构造方法
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
StringBuffer sb= new StringBuffer();
System.out.println(sb.length());
//0
System.out.println(sb.capacity());
//16 默认大写16
StringBuffer sb2= new StringBuffer(10);
System.out.println(sb2.length());
System.out.println(sb2.capacity());
// 0 10
StringBuffer sb3= new StringBuffer("heima");
System.out.println(sb3.length());
System.out.println(sb3.capacity());
// 5 21 16+5
}
}
StringBuffer的功能
*添加功能
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
// demo1();
StringBuffer sb= new StringBuffer("1234");
sb.insert(3, "heima");
System.out.println(sb);
//123heima4 将heima添加到索引3的维持上去 原来索引3后退
}
private static void demo1() {
StringBuffer sb= new StringBuffer();
StringBuffer sb2=sb.append("true");
StringBuffer sb3=sb.append("heima");
StringBuffer sb4=sb.append(100);
System.out.println(sb.toString());
System.out.println(sb2.toString());
System.out.println(sb3.toString());
System.out.println(sb4.toString());
//全是truehiema100 指向同一个对象
}
}
*删除功能
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("heima");
sb.deleteCharAt(4);
System.out.println(sb);
//heim
sb.delete(0, 2);
System.out.println(sb);
//删除包含头不包含尾巴 im
sb.delete(0, sb.length());
//清空缓冲区
}
}
*替换和反转功能
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("heima");
sb.replace(0, 3, "bai");
System.out.println(sb);//baima
sb.reverse();
System.out.println(sb);
//amiab
}
}
*截取功能
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("woaiheima");
String str=sb.substring(4);
System.out.println(str);
//主语substring返回的是string
System.out.println(sb);
//没有改变sb
//substring(4,7) 含头不含尾
}
}
StringBuffer和string的转换
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
//demo();
StringBuffer sb= new StringBuffer("heima");
String s1=new String(sb);
System.out.println(s1);
System.out.println(sb.toString());
String s3=sb.substring(0, sb.length());
//1.string构造方法
//2.toString()方法
//3.subString()方法
}
private static void demo() {
StringBuffer sb1= new StringBuffer("heima");
System.out.println(sb1);
//构造方法string转化为stringbuffer
StringBuffer sb2= new StringBuffer();
sb2.append("heima");
System.out.println(sb2);
//通过append方法
}
}
数组转化成字符串
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
int[] arr={1,2,3};
System.out.println(arrayToString(arr));
//[1, 2, 3]
}
public static String arrayToString(int[] arr)
{
StringBuffer sb=new StringBuffer();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1)
{
sb.append(arr[i]).append("]");
}else{
sb.append(arr[i]+", ");
}
}
return sb.toString();
}
//比拼接string少产生垃圾
}
字符串反转
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
StringBuffer sb=new StringBuffer(line);
sb.reverse();
System.out.println(sb.toString());
}
}
StringBuffer和StringBulider的区别
- buffer 线程安全 效率低
- builder 线程不安全 效率高
string stringbuffer参数传递
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
String s="heima";
System.out.println(s);
change(s);
System.out.println(s);
//heima String类虽然是引用数据类型 参数传递和基本数据类型一样
StringBuffer sb=new StringBuffer();
sb.append("heima");
System.out.println(sb);
change(sb);
System.out.println(sb);
//heimacast
}
private static void change(StringBuffer sb) {
sb.append("itcast");
}
private static void change(String s) {
s+="itcast";
}
}
数组冒泡排序
- 相邻的比较
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
int[] arr={24,68,80,57,13};
bubbleSort(arr);
for(int x:arr)
{
System.out.println(x);
}
}
public static void bubbleSort(int[] arr)
{
for (int i = 0; i < arr.length-1; i++) {//外循环需要4次
for (int j = 0; j < arr.length-1-i; j++) {//防止索引越界
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
选择排序
- 用一个索引位置上的元素,依次与其他索引位置上的元素比较
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
int[] arr={24,68,80,57,13};
selectSort(arr);
for(int x:arr)
{
System.out.print(x+" ");
}
}
public static void selectSort(int[] arr)
{
for (int i = 0; i < arr.length-1; i++) {//外循环需要4次
for (int j = i+1; j < arr.length; j++) {//防止索引越界
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
}
二分查找
- 前提:数组元素有序
- 查找元素对应索引
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
int[] arr={11,22,33,44,55,66,77};
System.out.println(getIndex(arr,22));
System.out.println(getIndex(arr,66));
System.out.println(getIndex(arr,88));
}
/*
* 二分查找
* 1,返回值类型,int
* 2,参数列表int[] arr,int value
*/
public static int getIndex(int[] arr, int value) {
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while(arr[mid] != value) { //当中间值不等于要找的值,就开始循环查找
if(arr[mid] < value) { //当中间值小于了要找的值
min = mid + 1; //最小的索引改变
}else if (arr[mid] > value){ //当中间值大于了要找的值
max = mid - 1; //最大的索引改变
}
mid = (min + max) / 2; //无论最大还是最小改变,中间索引都会随之改变
if(min > max) { //如果最小索引大于了最大索引,就没有查找的可能性了
return -1; //返回-1
}
}
return mid;
}
}
Arrays类
package haha;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
int[] arr={33,22,11,44,66,55};
System.out.println(Arrays.toString(arr));
//数组转字符串
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.binarySearch(arr, 22));
System.out.println(Arrays.binarySearch(arr, 66));
System.out.println(Arrays.binarySearch(arr, 88));
//1 5 -7 负的插入点索引-1
}
}
基本类型包装类
- 可以在对象中定义更多功能操作该数据
- char对应Character int对应Integer 其他首字母大写
package haha;
public class Normal1 {
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(60));
System.out.println(Integer.toOctalString(60));
System.out.println(Integer.toHexString(60));
//111100 74 3c
}
}
Integer类
package haha;
public class Normal1 {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
//2147483647
//-2147483648
Integer i1=new Integer(100);
System.out.println(i1);
Integer i2=new Integer("100");
System.out.println(i2);
// Integer i3=new Integer("abc");
// System.out.println(i3);
// 错误 不是数字型字符串
}
}
String和int转换
package haha;
public class Normal1 {
public static void main(String[] args) {
//int ->String
int i=100;
String s1=i+"";
String s2=String.valueOf(100);
Integer i2=new Integer(i);
String s3=i2.toString();
String s4=Integer.toString(i);
System.out.println(s1);
//String ->int
String s="200";
Integer i3=new Integer(s);
int i4=i3.intValue();
int i5=Integer.parseInt(s);
//7种有parseXxx character没有
String st="true";
boolean bo=Boolean.parseBoolean(st);
System.out.println(st);
}
}
自动装箱拆箱
package haha;
//自动装箱:基本数据类型转换为包装类类型
//自动拆箱 包装类类型转换为基本类型
public class Normal1 {
public static void main(String[] args) {
Integer i2=100;//自动装箱
int z=i2+200; //自动拆箱
// Integer i3=null;
// int a=i3+100;
// System.out.println(a);
// 先判断是否为null 空指针异常
}
}
Integer 面试题
package haha;
public class Normal1 {
public static void main(String[] args) {
Integer i1=new Integer(97);
Integer i2=new Integer(97);
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
//false true
System.out.println("-------------");
Integer i3=new Integer(197);
Integer i4=new Integer(197);
System.out.println(i3==i4);
System.out.println(i3.equals(i4));
//false true
System.out.println("-------------");
Integer i5=97;
Integer i6=97;
System.out.println(i5==i6);
System.out.println(i5.equals(i6));
//true true
System.out.println("-------------");
Integer i7=197;
Integer i8=197;
System.out.println(i7==i8);
System.out.println(i7.equals(i8));
//false true
//-128 到127 在这个范围 自动装箱不会创建对象
//超过这个范围自动创造对象
}
}