day13

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12,43,56,23,72,81,92};
        System.out.println("排序前:");
        printArray(arr);
        System.out.println("排序后");
//        bubbleSort(arr);
//        printArray(arr);

        selectSort(arr);
        printArray(arr);
    }
//    冒泡排序,就是相邻两个元素之间进行比较,大的元素排在最后面
    public static void bubbleSort(int[] arr){
        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;
                }
            }
        }
    }

//    选择排序,每一个元素与其他元素比较,最小放最前面
    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 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]+",");
            }
        }
    }
}

1:StringBuffer(掌握)

(1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲区类。StringBuffer供我们使用。线程安全的可变字符串
安全 -- 同步 -- 数据是安全的;不安全 -- 不同步 -- 效率高一些
安全和效率问题是永远困扰我们的问题。
安全:医院的网站,银行网站 效率:新闻网站,论坛之类的
(2)StringBuffer的构造方法
A:StringBuffer()
B:StringBuffer(int size)
C:StringBuffer(String str)
(3)StringBuffer的常见功能(自己补齐方法的声明和方法的解释)
A:添加功能

  • public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
  • public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
  • // 链式编程
    sb.append("hello").append(true).append(12).append(34.56);
    B:删除功能
  • public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
  • public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
    C:替换功能
  • public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
    D:反转功能
    public StringBuffer reverse()
    E:截取功能(注意这个返回值)
    StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
  • public String substring(int start)
  • public String substring(int start,int end)
    (4)StringBuffer的练习(做一遍)
    A:String和StringBuffer相互转换
  • String -- StringBuffer
    方式一:构造方法
    方式2:通过append()方法
    StringBuffer sb2 = new StringBuffer();
    sb2.append(s);
  • StringBuffer -- String
    toString()方法
    B:字符串的拼接
    C:把字符串反转
    D:判断一个字符串是否对称
    (5)面试题
    小细节:
    StringBuffer:同步的,数据安全,效率低。
    StringBuilder:不同步的,数据不安全,效率高。
    A:String,StringBuffer,StringBuilder的区别
    1.StringBuffer和String的区别?
    前者长度和内容可变,后者不可变。如果使用前者做字符串的拼接,不会浪费太多的资源。
    B:StringBuffer和数组的区别?
    二者都可以看出是一个容器,装其他的数据。但是呢,StringBuffer的数据最终是一个字符串数据。 而数组可以放置多种数据,但必须是同一种数据类型的。
    (6)注意的问题:
    String作为形式参数,StringBuffer作为形式参数。
    基本数据类型:形式参数的改变不影响实际参数。
    引用类型:形式参数的改变影响实际参数
    String作为参数传递,效果和基本类型作为参数传递是一样的。
    2:数组高级以及Arrays(掌握)
    (1)排序
    A:冒泡排序
    相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。
public static void bubbleSort(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;
                }
            }
        }
    }
    ```     
B:选择排序
把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。
    
            public static void selectSort(int[] arr) {
                for(int x=0; x<arr.length-1; x++) {
                    for(int y=x+1; y<arr.length; y++) {
                        if(arr[y] < arr[x]) {
                            int temp = arr[x];
                            arr[x] = arr[y];
                            arr[y] = temp;
                        }
                    }
                }
            }
    (2)查找
        A:基本查找
            针对数组无序的情况

            public static int getIndex(int[] arr,int value) {
                int index = -1;
                
                for(int x=0; x<arr.length; x++) {
                    if(arr[x] == value) {
                        index = x;
                        break;
                    }
                }
                
                return index;
            }
B:二分查找(折半查找)
            针对数组有序的情况(千万不要先排序,在查找)
            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) {
                        max = mid - 1;
                    }else if(arr[mid] < value) {
                        min = mid + 1;
                    }
                    
                    if(min > max) {
                        return -1;
                    }   
                    mid = (min+max)/2;
                }
                return mid;
            }
(3)Arrays工具类
        A:是针对数组进行操作的工具类。包括排序和查找等功能。
        B:要掌握的方法(自己补齐方法)
            把数组转成字符串:
            排序:
            二分查找:
    (4)Arrays工具类的源码解析
    (5)把字符串中的字符进行排序
        举例:
            "edacbgf"
            得到结果
            "abcdefg"
3:Integer(掌握)
    (1)为了让基本类型的数据进行更多的操作,Java就为每种基本类型提供了对应的包装类类型
        byte        Byte
        short       Short
        int         Integer
        long        Long
        float       Float
        double      Double
        char        Character
        boolean     Boolean
    (2)Integer的构造方法
        A:Integer i = new Integer(100);
        B:Integer i = new Integer("100");
            注意:这里的字符串必须是由数字字符组成
    (3)String和int的相互转换
        A:String -- int
            Integer.parseInt("100");
        B:int -- String
            String.valueOf(100);
    (4)其他的功能(了解)
        进制转换
    (5)JDK5的新特性
        自动装箱    基本类型--引用类型
        自动拆箱    引用类型--基本类型
        把下面的这个代码理解即可:
            Integer i = 100;
            i += 200;
    (6)面试题
        -128到127之间的数据缓冲池问题
              Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false
        System.out.println(i3.equals(i4));//true
        System.out.println("-----------");

              Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false
        System.out.println(i5.equals(i6));//true
        System.out.println("-----------");

        Integer i7 = 127;
        Integer i8 = 127;
        System.out.println(i7 == i8);//true
        System.out.println(i7.equals(i8));//true
通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
4:Character(了解)
(1)Character构造方法    
    Character ch = new Character('a');
    (2)要掌握的方法:(自己补齐)
        A:判断给定的字符是否是大写
        B:判断给定的字符是否是小写
        C:判断给定的字符是否是数字字符
        D:把给定的字符转成大写
        E:把给定的字符转成小写
    (3)案例:
        统计字符串中大写,小写及数字字符出现的次数
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容