StringBuffer(字符串缓冲区)和基本类的包装类类型

StringBuffer:

1)StringBuffer:线程安全的可变字符序列

  线程的安全问题,是难点(多线程属于难点) 多线程------>解决了多线程安全问题------>是死锁  :生产消费模式(Java中等待唤醒机制)

   线程安全 --->同步的---->执行效率低
  举例:
   银行的网站,医疗平台...
  
  线程不安全---->不同步---->执行效率高
  举例:
   新闻网站,XXX论坛...

  String和StringBuffer的区别:

      1.String是不可变的字符序列,StringBuffer是可变的字符序列

      2.从内存角度看:String定义时,会在常量池开辟空间,耗费内存

                            StringBuffer字符串缓冲区(里面存储的全是字符串),他会释放掉

 StringBuffer的构造方法:

         StringBuffer():无参构造的形式,初始容量为16

         StringBuffer(int capacity):指定容量构造一个字符串缓冲区

         StringBuffer(String str):构造一个字符串缓冲区,将指定的字符串内容作为其初始化内容

StringBuffer的获取功能:

        public int length():返回长度

         public int capacity():返回容量(如果超过容量,系统会自动分配(存储字符串的时候,英文的))

package org.westos.StringBuffer1;

public class StringBufferDemo1 {
	public static void main(String[] args) {
		//创建字符串缓冲区
		StringBuffer sb1=new StringBuffer();//无参构造
		System.out.println(sb1.length());
		System.out.println(sb1.capacity());
		System.out.println("----------");
		StringBuffer sb2=new StringBuffer("asdfqwer");
		System.out.println(sb2.length());
		System.out.println(sb2.capacity());
		System.out.println("----------");
		StringBuffer sb3=new StringBuffer(5);
		sb3.append("asdfzxcv");
		System.out.println(sb3.length());
		System.out.println(sb3.capacity());
		
	}
}

2)StringBuffer的添加功能

    public StringBuffer append(String/int/boolean....):在字符串缓冲区末尾追加数据,并返回字符串缓冲区本身

    public StringBuffer insert(int offest,String str):在指定位置处添加字符串,并返回字符串缓冲区本身

package org.westos.StringBuffer1;

public class StringBufferDemo2 {
public static void main(String[] args) {
	StringBuffer str1=new StringBuffer();
	str1.append("asdf");
	str1.append('q').append(123).append(true).append(12.34);
	System.out.println(str1);//asdfq123true12.34
	System.out.println("-----------");
	StringBuffer str2=new StringBuffer("hello");
	str2.insert(2,"java");
	str2.insert(2,"football").insert(2, 12);
	System.out.println(str2);//he12footballjavallo
}
}

3)StringBuffer的删除功能:

 public  StringBuffer deleteCharAt(in index):移除指定位置处的字符

public StringBuffer delete(int start,int end): 移除从start处到end-1处的字符串

package org.westos.StringBuffer1;

public class StringBufferDemo2 {
public static void main(String[] args) {
	StringBuffer str1=new StringBuffer();
	str1.append("asdf");
	str1.append('q').append(123).append(true).append(12.34);
	System.out.println(str1);//asdfq123true12.34
	System.out.println("-----------");
	StringBuffer str2=new StringBuffer("hello");
	str2.insert(2,"java");
	str2.insert(2,"football").insert(2, 12);
	System.out.println(str2);//he12footballjavallo
	System.out.println("-----------");
	System.out.println("str2:"+str2.deleteCharAt(0));//str2:e12footballjavallo
	System.out.println("str2:"+str2.delete(0, 7));//str2:balljavallo
}
}

4)StringBuffer的反转功能:

public StringBuffer reverse():将字符串缓冲区中的字符串序列反转,返回它本身

package org.westos.StringBuffer1;

public class StringBufferDemo3 {
public static void main(String[] args) {
	StringBuffer sb=new StringBuffer();
	sb.append("asdfqwerzxcv");
	System.out.println(sb.reverse());//vcxzrewqfdsa
}
}
5)StringBuffer的截取功能:

     public String subString(int index):从指定位置开始截取到末尾,返回一个新的字符串

     public String subString(int start,int end):从start处开始截取到end-1处结束,返回一个新的字符串

StringBuffer的替换功能:

public StringBuffer replace(int start,int end,String str):在该字符串缓冲区中把从start处到end-1处的字符串用str替换, 返回它本身

package org.westos.StringBuffer1;

public class StringBufferDemo3 {
public static void main(String[] args) {
	StringBuffer sb=new StringBuffer();
	sb.append("asdfqwerzxcv");
	System.out.println("sb:"+sb.replace(0, 4, "uiop"));//sb:uiopqwerzxcv
	String str=sb.substring(4);
	String str1=sb.substring(4, 8);
	System.out.println("str:"+str+",str1:"+str1);//str:qwerzxcv,str1:qwer
}
}
6)jdk5以后的特性:自动拆装箱

  int---Interger(是int类型的包装类类型) 需要将int--->String
  Interger--int:自动拆箱
  char---Character: 需要char--String
  为什么要类和类之间转换
  要将A类类型转换成B类型,为了使用B类的功能
  有时候,有需要将B类转换成A类,可能需求需要的是A类型

  String和StringBuffer之间的相互转换:

        stringBuffer中的功能:   public  String  toString():将字符串缓冲区中的字符串取出,返回给一个新的字符串

package org.westos.StringBuffer1;

public class StringBuffer4 {
public static void main(String[] args) {
	//将字符串转换为字符串缓冲区
	String str="qwer";
	//通过带参构造的方式将字符串转换为StringBuffer
	StringBuffer sb=new StringBuffer(str);
	System.out.println("sb:"+sb);
	//调用append方法转换
	StringBuffer sb2=new StringBuffer();
	sb2.append(str);
	System.out.println("sb2:"+sb2);
	System.out.println("------------");
	//将字符串缓冲区转换为字符串
	StringBuffer sb3=new StringBuffer("java");
	//通过带参构造转换
	String str1=new String(sb3);
	System.out.println("str1:"+str1);
	//通过Stringbuffer中的public String toString()方法转换
	String str2=sb3.toString();
	System.out.println("str2:"+str2);
}
}

7)

1.String,StringBuffer,StringBuilder的区别?

       StringBuffer与StringBuilder都是可变的字符序列,提供一个缓冲区(两者都可看做一个容器)

      StringBuffer:线程安全的,同步的,执行效率低

     StringBuilder:子安成不安全的,不同步的,执行效率高,并在单线程中优先使用StringBuilder

     StringBuffer执行效率虽然低,但为String类型与可变的字符串序列提供了缓冲区    

2 StringBuffer和数组的区别?

数组:是可以存储多个数据的容器,并且每个数据的类型必须一致

          数组长度:length属性

StringBuffer:也是容器,在字符串缓冲区存储的数据类型必须是数据类型

         长度:length()属性

基本类的包装类类型:

基本类型对应都有一个保证类型,目的就为了将基本数据类型可以String类型之间进行互相转换
  byte Byte
  short Short
  int Integer (讲)
  long Long
  float Float
  double Double
  char character (讲)
  boolean Boolean

Integer:

1)

Integer类是int类型的包装类类型

需要将100十进制(整数默认十进制)转化为二进制,八进制,十六进制

Integer的静态功能:

public static String toBinaryString(int i)

public static String toOctalString(int i)

public static String toHexString(int i)

获取Integer的最值:

public static final int MAX_VALUE: 值为 231-1 的常量,它表示 int 类型能够表示的最大值。

public static final int MIN_VALUE: 值为 -231的常量,它表示 int 类型能够表示的最小值。

package org.westos.Integer;

public class IntegerDemo1 {
public static void main(String[] args) {
	int x=1000;
	String str1=Integer.toBinaryString(x);
	System.out.println(str1);//1111101000
	System.out.println(Integer.toOctalString(x));//1750
	System.out.println(Integer.toHexString(x));//3e8
	System.out.println("----------");
	System.out.println(Integer.MIN_VALUE);//-2147483648
	System.out.println(Integer.MAX_VALUE);//2147483647
}
}

2)

Integer的构造方法:

   public Integer(int value)

   public Integer(String str)该String类型的值必须是数字字符串

package org.westos.Integer;

public class IntegerDemo2 {
public static void main(String[] args) {
	Integer i1=new Integer(11);
	Integer i3=12;//实际执行的是Integer.valueOf(int i)方法
	Integer i4=Integer.valueOf(12);
	Integer i2=new Integer("123");//该String类型的值必须是数字字符串
	System.out.println(i2+"---"+i1);
	System.out.println(i3+"---"+i4);

}
}

3)

int类型与String类型的转换

Integer的功能:

public static String toString(int i)

public static int parseInt(Sting str)

package org.westos.Integer;

public class IntegerDemo3 {
public static void main(String[] args) {
	//int转换为String类型
	//字符串拼接
	String str1="";
	str1+=12;
	System.out.println(str1);
	//int--Integer--String
	int x=12;
	Integer i=Integer.valueOf(x);
	String str2=i.toString();
	System.out.println("str2:"+str2);
	//toString(int i)方法
	String str3=Integer.toString(x);
	System.out.println("str3:"+str3);
	//String转换为int类型
	//String--Integer--int
	Integer i2=new Integer("12345");
	int x2=i2.intValue();
	System.out.println("x2:"+x2);
	//parseInt(String str)方法
	int x3=Integer.parseInt("12345");
	System.out.println("x3:"+x3);
}
}

4)JDK5以后提供了自动拆装箱

       可以将int-->装箱 Integer

         也可以将Integer-->拆箱 int

JDK5 还提供了哪些特性:

   泛型,可变参数,增强for循环(在集合中)等等..
   JDK8特性:
   Stream流 --> 表达式

package org.westos.Integer;

public class IntegerDemo4 {
public static void main(String[] args) {
	//装箱
	Integer i1=12;
	int i2=13;
	i2+=i1;//先将i1拆箱-->int,在执行i1+i2
	System.out.println("i2:"+i2);
	i1+=i2;//先将i1拆箱-->int,在执行i1+i2,-->在装箱Integer
	System.out.println("i1:"+i1);
	System.out.println("---------");
	/*反编译之后的代码块
	 * Integer i1 = Integer.valueOf(12);
	int i2 = 13;
	i2 += i1.intValue();
	System.out.println((new StringBuilder("i2:")).append(i2).toString());
	i1 = Integer.valueOf(i1.intValue() + i2);
	System.out.println((new StringBuilder("i1:")).append(i1).toString());*/
}
}

Character

1)Character类:

      Character类在对象中包装了基本类型char的值,Character类型的对象包含char类型的单个字节

                      已确定字符的大小写,数字类型

       构造方法:public Character(char value)

package org.westos.Character;

public class CharacterDemo1 {
public static void main(String[] args) {
	Character ch=new Character('a');
	Character ch2=new Character((char)65);
	Character ch3=new Character('5');
System.out.println("ch:"+ch+"--"+"ch2:"+ch2+"---"+"ch3:"+ch3);
}
}

    Character类的判断功能:

    public static boolean isDigit(char ch)指定字符是否为数字

    public static boolean isUpperCase(char ch)是否为大写字母

     public static boolean isLowerCase(char ch)是否为小写字母

  转换功能:

public static int toUpperCase(int value)

public static int toLowerCase(int value)


package org.westos.Character;

public class CharacterDemo1 {
	public static void main(String[] args) {
		//创建Character类对象
		Character ch = new Character('a');
		Character ch2 = new Character((char) 65);
		Character ch3 = new Character('5');
		System.out.println("ch:" + ch + "--" + "ch2:" + ch2 + "---" + "ch3:" + ch3);
       //判断该字符是否为数字
		System.out.println(Character.isDigit(ch));
		System.out.println(Character.isUpperCase(ch2));
		System.out.println(Character.isLowerCase(ch3));
		//判断是否为小写字母
		System.out.println(Character.isDigit(ch));
		System.out.println(Character.isUpperCase(ch2));
		System.out.println(Character.isLowerCase(ch3));
		//判断是否为大写字母
		System.out.println(Character.isDigit(ch));
		System.out.println(Character.isUpperCase(ch2));
		System.out.println(Character.isLowerCase(ch3));
		System.out.println("-------");
		//将大写字母转换为小写
		char ch4=Character.toLowerCase('A');
		System.out.println(ch4);
		//小写转换为大写
		char ch5=Character.toUpperCase('b');
		System.out.println(ch5);
		System.out.println(Character.toLowerCase(67));//99

	}
}

2)需求:键盘录入一个字符串,统计当前字符串中大写字母字符,小写字母字符,数字字符的个数(不考虑其他字符) 

package org.westos.Character;

import java.util.Scanner;

public class CharacterDemo2 {
	public static void main(String[] args) {
		while (true) {
			int numcount = 0;
			int smallcount = 0;
			int bigcount = 0;
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入一个字符串");
			String str = sc.nextLine();
			for (int i = 0; i < str.length(); i++) {
				if (Character.isDigit(str.charAt(i)))
					numcount++;
				else if (Character.isUpperCase(str.charAt(i)))
					bigcount++;
				else if (Character.isLowerCase(str.charAt(i)))
					smallcount++;
			}
			System.out.println("该字符串中大写字母有" + bigcount + "个");
			System.out.println("小写字母有" + smallcount + "个");
			System.out.println("数字字符有" + numcount + "个");
		}
	}
}

冒泡排序的两种方法

1)两两比较,大的往后放,第一次比较完毕最大值出现在最大索引处....

package org.westos.Array;

public class AyyayDemo {
public static void main(String[] args) {
	//创建数组
	int []arr=new int[] {12,43,23,87,49,30,16} ;
	printArray(arr);
	paixu(arr);
	printArray(arr);
}
//排序功能
public static void paixu(int []arr) {
	for(int x=0;x<arr.length-1;x++)
		for(int y=0;y<arr.length-1-x;y++) {
			if(arr[y]>arr[y+1]) {
				int temp=arr[y];
				arr[y]=arr[y+1];
				arr[y+1]=temp;
			}
		}
}
//遍历功能
public static void printArray(int []arr) {
	System.out.print("[");
	for(int i=0;i<arr.length;i++) {
		if(i==arr.length-1)
			System.out.println(arr[i]+"]");
		else System.out.print(arr[i]+",");
	}
}
}

2)选择排序: 用0索引对应的元素依次后面索引对应的元素进行比较, 1索引..... 小的数据往前方法,就可以得到一个排好序的数组...

package org.westos.Array;


import java.util.Arrays;
import java.util.Scanner;


public class ArrayDemo2 {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一个字符串");
	String str=sc.nextLine();
	byte []by=str.getBytes();//把该字符串转换为数组
	printArray(by);
	paixu2(by);
	printArray(by);
	String str2=Arrays.toString(by);//把该数组转换为字符串形式的数组
	System.out.println(str2);
	String str3=new String(by);//把该数组转换为字符串
	System.out.println(str3);
}
//遍历功能
public static void printArray(byte[]bytes) {
	System.out.print("[");
	for(int i=0;i<bytes.length;i++) {
		if(i==bytes.length-1)
			System.out.println(bytes[i]+"]");
		else
			System.out.print(bytes[i]+",");
	}
}
//排序功能
public static void paixu2(byte[]by) {
	for(int x=0;x<by.length-1;x++)
		for(int y=x+1;y<by.length;y++) 
			if(by[x]>by[y]) {
				byte temp=by[x];
				by[x]=by[y];
				by[y]=temp;
			}		
}
}

在数组中使用二分法查找索引

数组中的元素查找法(基本查找法)
 ***注意:该数组必须是有序的
   折半查找(二分查找) :数组一定是有序
 分析:
  A:定义最小索引和最大索引
  B:计算中间索引
  C:中间索引对应的元素和需要查找的元素比较
  相等,直接返回中间索引
  不相等:
  大了,左边找
  max = mid -1 ;
  小了,右边找
  min = mid + 1 ;
  E:重新计算中间索引 ,回到B继续查找

public class ArrayDemo3 {
	
	public static void main(String[] args) {
		
		//定义一个数组
		int[] arr = {11,22,33,44,55,66,77} ;
		
		//写一个方法来调用
		int index = search(arr, 33) ;
		System.out.println("index:"+index);
		
		int index2 = search(arr, 333) ;
		System.out.println("index2:"+index2);
		
	}
	
	/**
	 * 两个明确:
	 * 	明确返回值类型:int
	 * 明确参数类型:2个参数 int[] arr ,int value
	 */
	public static int search(int[] arr,int value) {
		//1定义数组中的最小索引和最大索引
		int min = 0 ;
		int max = arr.length -1 ;
		
		//2 计算出中间索引
		int mid = (max+min)/2 ;
		
		//3)拿中间索引对应的元素和需要查找的元素进行比较
		//如果相等,返回
		while(arr[mid]!=value) {
			//不相等
			if(arr[mid] >value) {
				 max = mid -1 ;
			}else {
				 min = mid + 1 ;
			}
			
			//如果这value在数组中找不到,找不到返回-1
			if(min>max) {
				return -1 ;
			}
			
			//重新计算出中间索引
			mid = (max+min)/2 ;
		}
		
		
		return mid ;
		
		
	}
	
}

猜你喜欢

转载自blog.csdn.net/weixin_41916558/article/details/80063563