2-java常见对象Arrays

13.12_常见对象(数组高级-冒泡排序)

  • A:基本思想:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
  • B:操作方法:
数组排序前:[98, 11, 3, 25, 79, 55, 44]
---------------------------------
arr[0]与arr1]比较,arr[1]与arr2]比较,arr[2]与arr3]比较,arr[3]与arr4]比较,arr[4]与arr5]比较,arr[5]与arr6]比较,比较6次
arr[0]与arr1]比较,arr[1]与arr2]比较,arr[2]与arr3]比较,arr[3]与arr4]比较,arr[4]与arr5]比较,比较5次
arr[0]与arr1]比较,arr[1]与arr2]比较,arr[2]与arr3]比较,arr[3]与arr4]比较,比较4次
arr[0]与arr1]比较,arr[1]与arr2]比较,arr[2]与arr3]比较,比较3次
arr[0]与arr1]比较,arr[1]与arr2]比较,比较2次
arr[0]与arr1]比较,比较1次
---------------------------------
数组排序后:[3, 11, 25, 44, 55, 79, 98]

  • C:数组冒泡排序代码实现:

    @Test
    public void bubbleSort(){

      int [] arr = {98,11,3,25,79,55,44};
    
      System.out.println("数组排序前:"+Arrays.toString(arr));
      System.out.println("---------------------------------");
      
      for(int i = 0;i< arr.length-1;i++){
      	int count = 0;
      	for(int j = 0;j<arr.length-1-i;j++){
      		
      		System.out.print("arr["+j+"]与"+"arr"+(j+1)+"]比较"+",");
      		if(arr[j] > arr[j+1]){
      			
      			int temp = arr[j];
      			arr[j] = arr[j+1];
      			arr[j+1] = temp;
      		}
      		count++;
      	}
      System.out.println("比较"+count+"次");
    
      	System.out.println("第"+(i+1)+"趟排序完:"+Arrays.toString(arr));
      }
      System.out.println("---------------------------------");
      System.out.println("数组排序后:"+Arrays.toString(arr));
    

    }

打印结果如下:
数组排序前:[98, 11, 3, 25, 79, 55, 44]
---------------------------------
第1趟排序完:[11, 3, 25, 79, 55, 44, 98]
第2趟排序完:[3, 11, 25, 55, 44, 79, 98]
第3趟排序完:[3, 11, 25, 44, 55, 79, 98]
第4趟排序完:[3, 11, 25, 44, 55, 79, 98]
第5趟排序完:[3, 11, 25, 44, 55, 79, 98]
第6趟排序完:[3, 11, 25, 44, 55, 79, 98]
---------------------------------
数组排序后:[3, 11, 25, 44, 55, 79, 98]

13.13_常见对象(数组高级-选择排序)

  • A:基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
  • B:操作方法:
操作方法:
第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推.....
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。
  • C: 数组选择排序代码实现:

    @Test
    public void selectSort(){

      int [] arr = {98,11,3,25,79,55,44};
      
      System.out.println("数组排序前:"+Arrays.toString(arr));
      System.out.println("---------------------------------");
      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;
      		   }
      	}
      	System.out.println("第"+(i+1)+"趟:"+Arrays.toString(arr));
      }
      System.out.println("---------------------------------");
      System.out.println("数组排序后:"+Arrays.toString(arr));
    

    }

    //打印结果如下:
	数组排序前:[98, 11, 3, 25, 79, 55, 44]
	---------------------------------
	第1趟:[3, 98, 11, 25, 79, 55, 44]
	第2趟:[3, 11, 98, 25, 79, 55, 44]
	第3趟:[3, 11, 25, 98, 79, 55, 44]
	第4趟:[3, 11, 25, 44, 98, 79, 55]
	第5趟:[3, 11, 25, 44, 55, 98, 79]
	第6趟:[3, 11, 25, 44, 55, 79, 98]
	---------------------------------
	数组排序后:[3, 11, 25, 44, 55, 79, 98]


13.14_常见对象(数组高级-二分查找代码实现及注意事项)

  • A:案例演示

    • 数组高级二分查找代码

    @Test
    public void binarySearch(){

      int [] arr = {3, 11, 25, 44, 55, 79, 98};
      
      System.out.println(getIndex(arr, 3));
      System.out.println(getIndex(arr, 98));
      System.out.println(getIndex(arr, 100));
    

    }

    private 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){         //当中间值大于了要找的值
      		max = mid - 1;            //最大的索引改变
      	}else if(arr[mid] < value){   //当中间值小于了要找的值
      		min = mid + 1;            //最小的索引改变
      	}
      	
      	if(min > max){              //如果最小索引大于了最大索引,就没有查找的可能性了
      		return -1;              //返回-1
      	}
      	
      	mid = (min+ max)/2;        //无论最大还是最小改变,中间索引都会随之改变
      }
      
      return mid;
    

    }

  • B:注意事项

    • 如果数组无序,就不能使用二分查找。
      • 因为如果你排序了,但是你排序的时候已经改变了我最原始的元素索引。

13.15_常见对象(Arrays类的概述和方法使用)

  • A:Arrays类概述
    • 针对数组进行操作的工具类。
    • 提供了排序,查找等功能。
  • B:成员方法
    • public static String toString(int[] a)
    • public static void sort(int[] a)
    • public static int binarySearch(int[] a,int key)

13.16_常见对象(基本类型包装类的概述)

  • A:为什么会有基本类型包装类
    • 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
  • B:常用操作
    • 常用的操作之一:用于基本数据类型与字符串之间的转换。
  • C:基本类型和包装类的对应
  •   byte             Byte
      short            Short
      int                Integer
      long            Long
      float            Float
      double            Double
      char            Character
      boolean            Boolean
    

13.17_常见对象(Integer类的概述和构造方法)

  • A:Integer类概述
    • 通过JDK提供的API,查看Integer类的说明

    • Integer 类在对象中包装了一个基本类型 int 的值,

    • 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,

    • 还提供了处理 int 类型时非常有用的其他一些常量和方法

  • B:构造方法
    • public Integer(int value)
    • public Integer(String s)
  • C:案例演示
    • 使用构造方法创建对象
public static void main(String[] args) {
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
		
		Integer i1 = new Integer(100);
		System.out.println(i1);
		
		//Integer i2 = new Integer("abc");			//java.lang.NumberFormatException数字格式异常
		//System.out.println(i2);						//因为abc不是数字字符串,所以转换会报错
		
		Integer i3 = new Integer("100");
		System.out.println(i3);
	}

13.18_常见对象(String和int类型的相互转换)

  • A:int -- String
    • a:和""进行拼接
    • b:public static String valueOf(int i)
    • c:int -- Integer -- String(Integer类的toString方法())
    • d:public static String toString(int i)(Integer类的静态方法)
  • B:String -- int
    • a:String -- Integer -- int
    • public static int parseInt(String s)

13.19_常见对象(JDK5的新特性自动装箱和拆箱)

  • A:JDK5的新特性
    • 自动装箱:把基本类型转换为包装类类型
    • 自动拆箱:把包装类类型转换为基本类型
  • B:案例演示
    • JDK5的新特性自动装箱和拆箱

    • Integer ii = 100;

    • ii += 200;

  • C:注意事项
    • 在使用时,Integer x = null;代码就会出现NullPointerException。
    • 建议先判断是否为null,然后再使用。

13.20_常见对象(Integer的面试题)

  • A:Integer的面试题

  •  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));
      System.out.println("-----------");
    
      Integer i3 = new Integer(197);
      Integer i4 = new Integer(197);
      System.out.println(i3 == i4);
      System.out.println(i3.equals(i4));
      System.out.println("-----------");
    
      Integer i5 = 97;
      Integer i6 = 97;
      System.out.println(i5 == i6);
      System.out.println(i5.equals(i6));
      System.out.println("-----------");
    
      Integer i7 = 197;
      Integer i8 = 197;
      System.out.println(i7 == i8);
      System.out.println(i7.equals(i8));
    

    }

  打印结果如下:

    false
	true
	-----------
	false
	true
	-----------
	true
	true
	-----------
	false
	true

posted on 2016-07-28 16:23  天涯游者  阅读(247)  评论(0)    收藏  举报

导航