码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员_数组

时间:2015-08-26 21:54:04      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

一、数组:
  是一个java的容器,可以存储多个相同数据类型的数据. 
        java中的容器是用于存储数据的.可以存储多个数据.
 二、数组的声明:
  数据类型 []数组名;
   数组名:本质就是一个变量. 只不过该变量不再是基本数据类型,而是数组类型.
   数据类型: 明确数组中存储的数据的类型.
   int[] arr; (推荐)
    int arr   [];  也是合法的...
  三、数组的初始化:
   数组名=new 数据类型[数组的长度|元素的个数];
   new 操作符,会在堆内存中开辟空间,空间的大小取决于数组中存储的元素的个数(程序员决定)
   开辟的这个空间,内存是一块连续的内存,并且这块内存有编号(角标),每一个位置(角标)都有默认值 
   new 操作符会将这块内存的地址值赋值给数组名.
   数组名存储的是数组在堆内存的地址.
   简单来说: 数组在堆内存, 数组内部空间有编号,数组每一个编号位置对应的有默认值...
   int[] arr=new int[5];
 四、 数组的使用:
   数组作为一个容器,基本功能.
   功能一:
    存储数据
    数组名[角标]=值|表达式;
   功能二:
    取出数据
    数组名[角标]

五、实例代码:

 1 public class Demo{
 2     public static void main(String[] args){
 3         //1. 声明数组. 
 4         int[] arr; 
 5         //2. 初始化数组(容器)  ,可以明确数组中存储的数据的个数. 
 6         arr=new int[3]; 
 7         
 8         // 可以访问堆内存这个空间. 
 9         System.out.println(arr);
10         // 访问数组编号为0位置的元素 
11         System.out.println(arr[0]); 
12         // 往数组的指定位置存储元素. 
13         arr[0]=100; 
14         System.out.println(arr[0]); 
15         
16         // 实际开发. 各种各样的数组(不同数据类型的,长度不同的数组) 数组的声明和初始化一行完成... 
17         int[] arr1=new int[5]; 
18         char[] arr2=new char[3];
19         boolean [] arr3=new boolean[2];
20         double[] arr4=new double[10]; 
21         String[] arr5=new String[100]; 
22         
23         // 使用数组存储数据. 
24         arr[0]=1;
25         arr[1]=100;
26         arr[2]=5; 
27         // 取出数组中每一个角标位置存储的元素.
28         System.out.println(arr[0]);
29         System.out.println(arr[1]);
30         System.out.println(arr[2]); 
31     }
32 }

六、数组的其他格式:
  数组的格式一:
   数据类型[] 数组名=new 数据类型[元素个数];
  数组的格式二:
   数据类型[] 数组名={元素1,元素2,元素3,元素4...};
    
 数组的属性:
  length 数组.
  使用规则:
   数组名.length .该数组会返回指定的数组的长度(元素的个数)
 数组的常见异常:
  ArrayIndexOutOfBoundsException ->角标越界异常.
    访问的角标不存在   <0  >length-1 
  NullPointerException   ->空指针异常
    数组名.length
    赋值:
     数组名[角标]=值
    取值:
     数组名[角标]
    数组名记录的不再是一个有效的数组的地址值时,而是null,就会出现空指针...

七、数组排序

数组常用的排序方法有:

1、选择排序法

2、冒泡排序法

3、二分查找

 1 public class Demo1{
 2     public static void main(String[] args){
 3         int[] arr={10,8,7,2,5};
 4         printArr(arr);
 5         //bubbleSort(arr);
 6         selectSort(arr);
 7         printArr(arr);    
 8     }
 9     /**
10         选择排序:
11             第一次: 取出数组的0角标位置的元素,和0角标后的所有元素比较大小. 
12                    只要arr[0]>arr[0之后],就互换元素. 保证数组0角标位置存储的是一个最小值. 
13             第二次: 取出数组的1角标位置的元素,和1角标后的左右元素比较大小. 
14                 只要arr[1]>arr[1之后],就互换, 保证数组1角标位置出现较小值
15             第三次: 取出数组2角标位置元素... 
16                 数组2角标位置出现了较小值. 
17             ...
18             如果数组中有N 个元素,这个需要持续N-1次... 
19     */
20     public static void selectSort(int[] arr){
21         for(int j=0;j<arr.length-1;j++){
22             for(int i=j+1;i<arr.length;i++){
23                 if(arr[j]>arr[i]){
24                     int temp=arr[j];
25                     arr[j]=arr[i];
26                     arr[i]=temp; 
27                 }
28             }
29         }
30     }
31     
32     /**
33         冒泡排序:
34             前一个元素和后一个元素比价大小. 
35             只要arr[n]>arr[n+1] 就互换位置. 
36             数组的每一个位置的元素都和后一个位置元素进行比较大小(避免数组最后一个元素)可以找出一个最值放在数组的最后...  
37     */
38     public static void bubbleSort(int[] arr){
39         //外层循环循环一次,保证数组超出一个最值,放在了数组的后边.
40         //-1 5个元素,只需要4次,就可以找出最值了. 
41         for(int j=0;j<arr.length-1;j++){
42             //内层循环: -1 避免越界  前一个元素和后一个元素比较大小.5个元素,循环应该4次. 
43             //内层循环 -j  提高性能(效率),避免重复性的比较. 内层循环执行一次,数组就出现一个最值,该值避免参与重复的比较. 
44             for(int i=0;i<arr.length-1-j;i++){
45                 if(arr[i]>arr[i+1]){
46                     int temp=arr[i];
47                     arr[i]=arr[i+1];
48                     arr[i+1]=temp; 
49                 }
50             }
51         }
52     }
53     
54     public static void printArr(int[] arr){
55         System.out.print("["); // 开始[
56         for(int i=0;i<arr.length;i++){
57             if(i==arr.length-1){ // 如果最后一个元素,元素后不加逗号
58                 System.out.print(arr[i]);
59             }else{
60                 System.out.print(arr[i]+","); // 如果不是,元素后加逗号
61             }
62         }
63         System.out.println("]"); // 结束] 并换行. 
64     }
65 }
66 /**
67         二分查找:
68             当数组有序: 提升查找的性能. 使用二分查找. 
69     */
70     public static int binarySearch(int[] arr,int key){
71         int start=0; // 定位数组的开始
72         int end=arr.length-1; // 定位在数组的最右角标位置.
73         while(start<=end){ // 控制循环. 
74             int mid=(start+end)/2; 
75             if(key>arr[mid]){
76                 System.out.println("要找的key 在右边."); 
77                 start=mid+1; 
78             }else if(key<arr[mid]){
79                 System.out.println("要找的key 在左边"); 
80                 end=mid-1; 
81             }else{
82             System.out.println("找到了...");
83                 return mid;  //要找的key 和arr[mid] 重合的
84             } 
85         }
86         return -1; // 如果找不到返回-1. 
87     }

 

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

黑马程序员_数组

标签:

原文地址:http://www.cnblogs.com/Erric-Zhou1992/p/4761603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!