数组

  数组:
    数组就是一个具有相同数据类型的数据的集合。

      int[] arr  (推荐)
      int arr[]
      这两种都是可以的

    初始化数组的3种方式:

      double[] arr1={10.1,20.2,56.5}; 长度为3
      double[] arr2=new double[]{10.1,20.2,56.5};
        这两种是静态初始化,需要你手动去赋初值
      double[] arr3=new double[10]; 创建了长度为10的数组(java会自动赋初值0)
        这种是动态初始化,他是java虚拟机自动赋初值的。
    数组的存储问题:

      数组属于对象类型,是存放在堆内存中的。
      对于基本类型的数组,它会在栈中创建一个变量,这个变量指向的是堆中的对象的地址,在堆中创建一个对象(即分配一个连续的内存),这个对象里存放的是数组的元素,元素里存放的是对应元素上的值。
      对于引用类型数组,数组中的元素存放的是引用,他指向另一块内存,其实他的数组元素就是一个引用类型的变量。(二维数组就是这样的)

      问题:引用变量什么时候就只是栈中的变量,什么时候又是实际的java对象呢?
        答:引用变量的值其实就是对象的地址,因为java是不允许程序员来直接访问堆内存的,
        所以当你通过引用变量来访问java对象的方法和属性时,那么此时这个引用变量就
        会由他所引用的对象来代替。

    关于数组有一系类的算法:
      一系列的排序:
        快速排序 希尔排序 堆排序....

      查找:
        二分查找:前提是你要查找的数据所在的数组 必须是一个有序的

package com.guigu.test;

import java.util.Scanner;

public class Test3 {
    
    public static boolean find(int num,int[] arr){//能找到就返回true 不能找到就返回false
        int left=0;//第一的索引
        int right=arr.length-1;//最后的索引
        int mid=0;//定义一个mid来接收中间的值
        
        while(left<=right){
            
            mid=(right-left)/2+left;
            
            if(arr[mid]==num){
                System.out.println("100在数组的索引为"+mid);
                return true;
            }else if(arr[mid]>num){//说明要找的数在左边
                right=mid-1;
            }else if(arr[mid]<num){//说明要找的数在右边
                left=mid+1;
            }
            
        }
        
        return false;
    }
    
    public static void main(String[] args) {
        
        int[] arr={0,8,9,20,30,50,70,80,100,120};
        
        System.out.print("输入要查找的数:");
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        
        boolean result=find(num, arr);
        
        if(result){
            find(num, arr);
        }else{
            System.out.println("你输入的数不存在");
        }
        
        
        
    }
}

 

posted on 2016-06-02 19:23  cch_java  阅读(305)  评论(0编辑  收藏  举报

导航