笔记之java基础---13

1、冒泡排序:

        相邻元素两两比较,大的往后走。第一次完毕后,最大值就在最大索引处。

        代码实现:

 int[] arr = {37,92,54,18,76};

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;
}
}
}

}

2、二分查找:

        注意:二分查找必须是有序查找,数组必须是有序的。      

public static int find(int[] arr){
        int start = 0;
        int end = arr.length-1;
        int mid = (start+end)/2;
        
        while(arr[mid] != 18){
        if(arr[mid] < 18){
        //说明目标值在右边
        start = mid + 1;              
        }else {
        //说明目标值在左边
        end = mid - 1;        
        }
       
        //当小的索引大于大的索引且还没有找到说明不存在
        if(start > end){
        return -1;
        }

        mid = (start+end)/2;
        }
        return mid;

}

3、Arrays类:针对数组操作的工具类,主要是排序和查找
         * 功能:
         * public static String toString(int[] a);把整形数组变成字符串。
         * sort(int[] a);对数组排序
         * binarySearch(int[] a, int key);对数组二分查找

        代码实例:

public class ArrayDemo3 {
public static void main(String[] args) {
          int[] arr = {23,84,51,72,69};
          
          //public static String toString(int[] a);//把整形数组变成字符串。
          String str = Arrays.toString(arr);
          System.out.println(str);         
          
           // 对arr数组排序
           Arrays.sort(arr);

           // 排序完了后把整形数组变成字符串输出

           System.out.println(Arrays.toString(arr));
           
          //binarySearch(int[] a, int key);对数组二分查找,要求数组有顺序
          
         int[] arr2 = {12,23,34,45,56,67};
          //查找2,3的索引
          System.out.println(Arrays.binarySearch(arr2,23));
          System.out.println(Arrays.binarySearch(arr2,27));  
          
}

}

4、System类包含一些有用的类字段和方法,它不能被实例化 
  * static void exit(int status);终止当前正在运行的java虚拟机,参数用作状态码;根据惯例,非零的状态码表示异常终止。
 * static long currentTimeMillis();返回以毫秒为单位的时间
 * static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

 * 从指定数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

5、 StringBuffer:字符串缓冲区类
 1)与String的区别:
 * String一旦被赋值,不能发生改变。而StringBuffer可以改变。
 * 为什么呢?
 * StringBuffer采用的是缓冲区机制。
 *      一开始首先开辟以希望空间,随着数据的增多还可以继续开辟空间,这些操作针对的是同一个对象。
 *      
 * 构造方法:
 * StringBuffer(),构造一个不带字符的缓冲区,初始容量为16
 * StringBuffer(int capacity),指定容量
 * StringBuffer(String str),有初始字符
 * 
 * 成员方法:
 *  
 *       int length();Returns the length (character count).

 *       int capacity();Returns the current capacity.

代码实例:

         public static void main(String[] args) {

         //方式1

        StringBuffer sb = new StringBuffer();
        System.out.println("sb"+sb);
        System.out.println("sb.length"+"-------"+sb.length());     //0
        System.out.println("sb.capcity"+"-------"+sb.capacity());    //16
        
        //方式2
        StringBuffer sb2 = new StringBuffer(50);
        System.out.println("sb2"+sb2);
        System.out.println("sb2.length"+"-------"+sb2.length());        //0
        System.out.println("sb2.capcity"+"-------"+sb2.capacity());        //50
        
        //方式3,字符串转成StringBuffer可以通过这种构造方法实现
        StringBuffer sb3 = new StringBuffer("hello");
        System.out.println("sb3"+sb3);
        System.out.println("sb3.length"+"-------"+sb3.length());        //5
        System.out.println("sb3.capcity"+"-------"+sb3.capacity());        //21

}

2)添加功能:
 * StringBuffer append(int i);在末尾追加元素

 *      StringBuffer insert(int offset, String str);在指定位置添加

3)删除功能:
 * StringBuffer deleteCharAt(int index);删除指定位置字符

 * StringBuffer delete(int start, int end);删除指定开始位置到结束位置字符。

4)反转功能:

        reverse()

6、测试题: 要求:键盘输入一个字符串,把字符串的数据反转输出:

方式一:
            A:把字符串变成字符数组
            B:数组倒着打
  方式二:
             想使用StringBuffer的reverse()方法。
                A:String-----StringBuffer  构造方法
                B:StringBuffer-----reverse()

                C:StringBuffer-----String   构造方法,toString()

7、关于StringBuffer的数据类型的面试题:

    1)面试题一:
 * 基本类型:形式参数改变不影响实际参数
 * 引用类型:形式参数改变直接影响实际参数
 * 但是:字符串是一个特殊的引用类型。
 * 
 * 那么StringBuffer呢?

        笔记之java基础---13

        笔记之java基础---13

        2)面试题二:

笔记之java基础---13

8、Integer类:

应用背景:我们的基本类型只有值的使用,为了能够进行更过的操作,比如说,某种基本类型的范围判断,整数的进制转换。

那么,java就针对每种基本类型提供了一种包装类使用。

 * 基本类型                         包装类
 * byte          Byte
 * short Short
 * int Integer
 * long Long
 * float Float
 * double Double
 * char Character
 * boolean Boolean
 以Integer为例
 1) 构造方法:
 * Integer(int value)
 * Integer(String s)
 * 注意这里的字符串必须是以数字为组成的字符串

2)进制转换的方法:

static String toBinaryString(int i);输入十进制,输出二进制。

                        toHexString(int i)  ;输入十进制,输出十六进制。

                        toOctalString(int i);输入十进制,输出八进制。  

3) int-----String
 * String.valueOf(num);
 *              toString(num);
     String-----int
 * Integer.parseInt(s);
         笔记之java基础---13

9、 自动装箱:就是把基本类型直接赋值给引用类型。

      自动拆箱:也就是把引用类型直接拆成基本类型

笔记之java基础---13

10、关于Integer的面试题:
 * byte常量池,

 *  byte范围内的值直接赋值给Integer,是从常量池中直接获取的。

笔记之java基础---13