【181天】黑马程序员27天视频学习笔记【Day13-上】

news/2024/7/5 23:18:43

叨逼叨两句

加油!

13-(1-12):StringBuffer类

概述

  1. StringBuffer不能像String一样用“+”与任意类型进行连接来修改,它只能通过某些方法来进行修改。
  2. StringBuffer是一个可变的字符序列,而String是一个不可变的字符序列。

构造方法

  1. StringBuffer():构造一个不带字符的字符串缓冲器,其初始容量为16个字符。【这个16相当于容器容量】
  2. StringBuffer(int capacity):构造一个不带字符,但具有指定初始容量的字符串缓冲区。
  3. StringBuffer(String str):构造一个字符串缓冲区, 并将其内容初始化为指定字符串内容。
  4. StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符。

区分length()与capacity()

  1. 前者是容器中的字符个数。
  2. 后者是容器的容量
package test_heima;

public class Demo03 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        System.out.println(sb.length());
        System.out.println(sb.capacity()); 
        
        /*StringBuffer sb = new StringBuffer("heima");
        System.out.println(sb.length());// 5
        System.out.println(sb.capacity());// 字符串的length+初始容量=21 
        */
        
    }
}

添加功能

  1. public StringBuffer append(String str)

        package test_heima;
    
    public class Demo04 {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            StringBuffer sb2 = sb.append(true);
            StringBuffer sb3 = sb.append("hehehehe");
            StringBuffer sb4 = sb.append(10000000);
        
            System.out.println(sb.toString());
            System.out.println(sb2.toString());
            System.out.println(sb3.toString());
            System.out.println(sb4.toString());
            
            //为什么结果一样?因为append方法返回的StringBuffer本身,即修改的是本身。
            
            
        }
        
    }
    
  2. public StringBuffer insert(int offset,String str)

        package test_heima;
    
    public class Demo05 {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("0123456");
            sb.insert(3, true);
            //sb.insert(1113, true); //在指定位置若无字符便会报错StringIndexOutOfBoundsException
            System.out.println(sb);
        }
    }
    
        

删除功能

  1. public StringBuffer deleteCharAt(int index)

        package test_heima;
    
    public class Demo06 {
    
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("0123456");
            //sb.deleteCharAt(3333); //报索引越界异常
            sb.deleteCharAt(3);        
            System.out.println(sb);
        }
    
    }
  2. public StringBuffer delete(int start,int end)【包头不包尾】

    package test_heima;
    
    public class Demo06 {
    
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("0123456");
            sb.delete(0, 2);
            //sb.delete(0, 222); //这个不会报错
            System.out.println(sb);
        }
    
    }
    

替换和反转功能

  1. public StringBuffer replace(int start,int end,String str)

    package test_heima;
    
    public class Demo {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("0123456789");
            sb.replace(0, 3, "apple");
            System.out.println(sb);
        }
    }
    
  2. public StringBuffer reverse()

    package test_heima;
    
    public class Demo {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("0123456789");
            sb.replace(0, 3, "apple");
            System.out.println(sb);
            sb.reverse();
            System.out.println(sb);
        }
    }
    

截取功能

  1. public String subString(int start)
  2. public String subString(int start,int end)

注意:返回类型不再是StringBuffer本身,而是String

package test_heima;

public class Demo07 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("012345678");
        String cc = sb.substring(2);
        System.out.println(cc);
    }
}
package test_heima;

public class Demo07 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("012345678");
        String cc = sb.substring(2,3);
        System.out.println(cc);
    }
}

StringBuffer与String的互相转换

  1. String——>StringBuffer

    1. 通过构造方法
    2. 通过append()方法
  2. StringBuffer——>String

    1. 通过构造方法
    2. 通过toString()方法
    3. 通过subString(0,length)
package test_heima;

public class Demo08 {

    public static void main(String[] args) {
        //String----->StringBuffer
        
        //法1:构造方法
        StringBuffer sb = new StringBuffer("abc");
        System.out.println(sb);
        
        //法2:apend
        StringBuffer sb2 = new StringBuffer();
        sb2.append("abc");
        System.out.println(sb2);
        
        //StringBuffer---->String
        
        //法1:构造方法
        StringBuffer sb3 = new StringBuffer("abc");
        String cc = new String(sb3);
        System.out.println(cc);
        
        //法2:通过toString方法
        StringBuffer sb4 = new StringBuffer("abc");
        String kk = sb4.toString();
        System.out.println(kk);
        
        //法3:通过subString(0,length)
        StringBuffer sb5 = new StringBuffer("abc");
        String zz = sb5.substring(0,sb5.length());
        System.out.println(zz);
        
    }

}

把数组转成字符串

用String功能实现

  1. 这种方法不推荐,会不断在堆上产生垃圾。
package test_heima;

public class Demo09 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        String s = "[";
        for(int i = 0;i<arr.length;i++){
            if(i!=(arr.length-1)){
                s += arr[i]+",";
            } else {
                s += arr[i]+"]";
            }
        }
        System.out.println(s);
    }
}

用StringBuffer功能实现

  1. 这种方法不推荐,变量与常量相互连接会新建StringBuffer对象,还得用其toString方法进行转换生成String对象,这样消耗内存
StringBuffer s = new StringBuffer();
        s.append("[");
        for(int i = 0;i<arr.length;i++){
            if(i!=arr.length-1){
                s.append(arr[i]+",");
            } else {
                s.append(arr[i]+"]");
            }
        }
        System.out.println(s);
  1. 推荐这种方法,从头到尾就新建了一个StringBuffer对象
StringBuffer s = new StringBuffer();
        s.append("[");
        for(int i = 0;i<arr.length;i++){
            if(i!=arr.length-1){
                s.append(arr[i]).append(",");
            } else {
                s.append(arr[i]).append("]");
            }
        }
        System.out.println(s);

StringBuilder与StringBuffer的区别

  1. StringBuffer是JDK1.0版本的,是线程安全的,同步的,效率低
  2. StringBuilder是JDK1.5版本的,是线程不安全的,不同步的,效率高

String与StringBuilder、StringBuffer的区别

  1. String是一个不可变的字符序列。
  2. StringBuilder、StringBuffer是可变的字符序列

String以StringBuffer作为参数传递

  1. 基本数据类型的值传递,不改变其值
  2. 引用数据类型的值传递,改变其值
  3. String类虽然是引用数据类型,但是它当做参数传递时和基本数据类型是一样的。
  4. 看看java 函数形参传值和传引用的区别
  1. java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
  2. 当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
  3. 当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。【其实形参拿到的只是引用地址值的拷贝,这个拷贝与实参无关了,但是这个拷贝可以操作对象的方法,进而改变它的属性】
package test_heima;

public class Demo10 {

    public static void main(String[] args) {
        String s = "aaa";
        System.out.println(s);
        chang(s);
        System.out.println(s);
        
        StringBuffer cc = new StringBuffer();
        cc.append("kkk");
        System.out.println(cc);
        chang(cc);
        System.out.println(cc);
        
        
    }

    public  static void chang(StringBuffer cc) {
        cc.append("llll");
    }

    public static void chang(String s) {
        s += "bbb";
    }

}

13-(12-17):冒泡排序、选择排序、数组二分法查找

package test_heima;

public class Demo11 {
    public static void main(String[] args) {
        int[] arr = {23,765,12,3,24,55,67};
        
        //bubbleSort(arr); //冒泡排序
        //selectSort(arr); //选择排序
        //print(arr);
        
        int[] arr2 = {11,22,33,44,55,66};
        int i = binarySearch(arr2,66);//二分法查找的前提是数组有序
        System.out.println(i);
    
    }

    public static int binarySearch(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; 
            } else {
                return mid;
            }
            
            mid = (min + max)/2;
            
            if(min > max){
                return -1;
            }
        
        }
        
        return mid;
    }
    
    public static void selectSort(int[] arr) {
        for(int i = 0;i < arr.length - 1;i++){
            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;
                }
            }
        }
    }

    public static void bubbleSort(int[] arr) {
        //冒泡排序
        boolean sorted = true;
        for(int i = 0;i < arr.length-1;i++){
            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;
                    sorted = false;
                }        
            }
            if(sorted){
                break;
            }
        }
    }

    public static void print(int[] arr){
        for(int i = 0;i < arr.length; i++){
            System.out.println(arr[i]+" ");
        }
    }

}

13.18:Array类的常用方法

  1. public static String toString(int[] a)
  2. public static void sort(int[] a);
  3. public static int binarySearch(int[] a,int key)

13.19:基本类型包装类概述

除了int和char的包装类分别对应于Integer和Character,其余的都是将类型名称改成首字母大写即可。


http://www.niftyadmin.cn/n/3144670.html

相关文章

设计模式-外观模式(结构性)、模板模式(结构性)

0 外观模式和模板模式 外观模式实现的是多各类协作共同完成一件事情&#xff0c;因此我们使用一个函数来封装这些操作&#xff0c;&#xff08;将这个函数放在一个类中&#xff09;。 模板模式实现的是一个类的多个函数组合完成一件事情&#xff0c;虽然类的每个函数可能有不同…

Django 学习笔记(三)模板导入

本章内容是将一个html网页放进模板中&#xff0c;并运行服务器将其展现出来。 平台&#xff1a;windows平台下Liunx子系统 目前的目录&#xff1a; hello ├── manage.py ├── hello │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsg…

redis 验证订单_php+redis消息队列实现抢购功能

实现功能&#xff1a; 1. 基于redis队列&#xff0c;防止高并发的超卖 2. 基于mysql的事务加排它锁&#xff0c;防止高并发的超卖基于redis队列工作流程&#xff1a; 1. 管理员根据goods表中的库存&#xff0c;创建redis商品库存队列 2. 客户端访问秒杀API 3. web服务器先从red…

HDU——2588 GCD

题目大意&#xff1a; 求1~N中与N的最大公约数大于M的个数 思路&#xff1a; 这个题是不是可以想到暴力枚举&#xff1f;&#xff1f;对于每一组数据枚举与他的最大公约数大于m的数的个数。 是&#xff0c;这种做法没错误&#xff0c;但是保准你T成狗。。。。 我们至少要找一个…

drop sqlite 多个表_SQlite在已创建的表中删除一列--解决方案

sqlite中是不支持删除列操作的&#xff0c;所以网上alter table table_name drop column col_name这个语句在sqlite中是无效的&#xff0c;而替代的方法可以如下&#xff1a;1.根据原表创建一张新表2.删除原表3.将新表重名为旧表的名称示例例子如下1.创建一张旧表Student&#…

Spark集群搭建(local、standalone、yarn)

Spark集群搭建 local本地模式 下载安装包解压即可使用&#xff0c;测试&#xff08;2.2版本&#xff09;./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[1] ./examples/jars/spark-examples_2.11-2.2.0.jar 100 local[1]&#xff1a;1代表线程数…

Windows 10新版Build 16215推送:UI风格、功能大提升

阔别三周&#xff0c;微软日前为Insider用户推送全新预览版系统Windows 10 Build 16215&#xff0c;此次限PC快速通道用户。 本次更新的内容非常丰富&#xff0c;主要是因为微软上周误发了Build 16212&#xff0c;所以不得不在原计划的16203上杂糅了16212。 首先要说的变化就是…

linux系统安装python集成环境_ubuntu下安装python开发集成环境

本文主要讲述作者自己安装python环境的步骤&#xff0c;主要使用anaconda集成环境。首先下载anaconda安装包&#xff1a; https://www.anaconda.com/distribution/在终端运行指令&#xff1a;bash ~/Downloads/Anaconda3-5.3.0-Linux-x86_64.sh其中~/Downloads/是下载anaconda的…