java_数组

来源:互联网 发布:系统空间数据被损坏 编辑:程序博客网 时间:2024/04/29 17:43
  数组

        数组是同一种类型数据的集合,可以理解为数组就是一个容器。数组是引用数据类型。

        好处

        可以自动为数组中的元素从0开始添加编号,方便操作这些操作。

        格式1

        元素类型[] 数组名称=new 元素类型[数组长度]

        如: int [] arr=new int[5];  定义一个长度为5的int类型的数组。数组内值默认为0.

        格式2

        元素类型[]数组名称=new 元素类型[]{元素,元素.......};

       如:int[] arr=new int[]{1,2,3,4,5};定义了一个长度为5int类型的数组,并且已为数组赋值。

       二维数组

        格式1

        元素类型[][] 数组名称=new int[一维数组元素个数][二维数组元素个数]

       如: int[][] arr=new int[3][4];//创建一个名为arr的二维数组,有3个一维数组,在这三个一维数组中,每个数组包含4个元素。并且初始值全部为0.

        格式2

         元素类型[][] 数组名称=new int{{元素,元素},{元素,元素,元素}}//里层花括号的个数代表一维数组的个数,花括号中的元素代表着相应数组里面的元素个数和值。

         如:int[][] arr=new int{{1,2,4},{4,5,9}};

       以前从不注重java的工作原理,但学习了毕老师的视频以后,觉得还是懂点为好。在学习的过程中,我了解到了java的内存结构,首先学到的是栈内存(栈区)与堆内存(堆区)。

     栈内存

         用于存储局部变量,当数据使用完,所占空间会自动释放。

     堆内存

         用于存储数组和对象,通过new建立的实例都存放在堆内存中

              1.每一个实体都有对应的内存地址值(16进制)

              2.实体中的变量都有默认初始化值。

              3.实体在不被使用的时候,会在不确定的时间,被垃圾回收机制回收。

javac编译的时候,检查的是语法错误。而java,才开始分配内存,这个时候出的错误就是分配内存的问题了。

 

堆的特点

1、内存地址值

2、默认初始化

3、垃圾回收机制

 

栈的特点:

1、自动释放

 

数组的定义方式:

1Type[]=new Type[数组元素]

2Type[]=new Type[]{数组的值1,数组的值2,数组的值3}

 

数组的初始化:

当创建一个数组时,每个元素被初始化。

比如:String names[]={"asdf","fda","sdfa"};

 

/*选择排序
*/


 class A{
      public static void arrayTest(int[] x){               
              for(int i=0;i<x.length-1;i++)              
                 for(int j=i+1;j<x.length;j++){
               if(x[i]>x[j])  { int t=x[i]; x[i]=x[j];x[j]=t;}
}
}      

 int[] b={12,32,41,34,54,65,567,34,345,345,2,12,74};
  for(int i=0;i<b.length;i++)
   System.out.print(b[i]+",");
   System.out.println();
 B fuck=new B();
 fuck.bubbleSort(b);
for(int i=0;i<b.length;i++)
System.out.print(b[i]+",");

}
}


class B{
    public void  bubbleSort(int[] x){
         for(int i=0;i<x.length-1;i++)
          for(int j=0;j<x.length-i-1;j++){/*-i是因为每次比较都要少一个元素,外嵌的i增加1,这里就要

少一个元素。-1是因为下面的if语句,x[j+1]会发生越界。这里的“x.length-i-j"可以和”j=0“一起结合改,

只要是别越界。都OK*/
              if(x[j]>x[j+1]){
                int temp=x[j];
                 x[j]=x[j+1];
                 x[j+1]=temp;

/*Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException:10
                   at A.arrayTest(FTD1.java:5)
                   at A.main(FTD1.java:13)
这个错误 “数组越界”,上面的classB如果不-1,就出现这个错误了
*/

 

}                 
}
}

 


查表法:将所有的元素零食存储起来,建立对应的关系。
1、插入数组元素,并且要让数组的顺序不被打乱——数组的折半查找!~
2、10进制转成2,16进制,查表法!
   10进制转16进制,
public static void a(int num)
{  
for(int x=0;x<8;x++)
    {
          int temp=num&15;
           if(temp>9)
             System.out.println((char)(temp-10+'A'));
        else
             System.out.println(temp);
              num=num>>>4;
         }
}
  
   10转2  
   public static void a(int num){
        while(num>0){
      System.out.pirntln(num%2);// 短除法
           num=num/2;   // 当除到0的时候over
 }  
}

折半查找(前提是数组已经排序好了)

毕老师4天,数组07。

public static int getA(int[] arr,int keyi){

int min=0;max=arr.length-1,mid;// min,max 为数组的最小,最大角标,mid为中间值

   while(min<=max){

   mid=(max+min)/2;

  if(key<arr[mid])

      max=mid-1;   //至于 为什么,得自己好好的想想了

 else if(key<arr[mid])

     min=mid+1;

 else return mid;

}

return -1; // -1表示没有结果,该数组没有你要查找的数

}

注: 折半法可以用来在一个有序的数组中,插入一个元素~~~~~~~~~~~~~~~~~~~~~~~~~~,如下例

public static int getA(int[] arr,int keyi){

int min=0;max=arr.length-1,mid;// min,max 为数组的最小,最大角标,mid为中间值

   while(min<=max){

   mid=(max+min)/2;

  if(key<arr[mid])

      max=mid-1;   //至于 为什么,得自己好好的想想了

 else if(key<arr[mid])

     min=mid+1;

 else return mid;

}

return min;//由于min是向右移的,所以当min max移到重叠后,按照上面程序,还要在移一次,所以min一定是较大的数标,所以也就是插入数组的元素了!

 

如果是无顺序数组

那么就一个void带参数(数组)的方法,然后是for循环,条件是num==key;符合条件return,不符合继续循环,全部找完,没有就跳出for,return-1   O了~

原创粉丝点击