Java基础--数组

1、数组定义

int[] arr = new int[1024];
也可以int arr[] = new int[1024];(C++是这种方式, Java推荐上一种)

2、for循环遍历

class  ArrayDemo
{
     public static void main(String[] args) 
     {
          int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};

          for (int x=0; x<arr.length; x++)
          {
               System.out.println("arr["+x+"]="+arr[x]+";");
          }
    }
}//很基础很简单

不能用这种方式打印System.out.println(arr);打印出的是数组arr的哈希地址。乍一看以为乱码。

3、另一种思路求最值

另一种思路求最大值/最小值:
 public static int getMax2(int[] arr)
 {
  int max = 0;
 //利用数组的角标记录最大值
  for (int x=1; x<arr.length; x++)
  {
   if(arr[x]>arr[max])
    max = x;
  }
  return arr[max];
 }

4、选择排序:

第一个元素挨个与后面比较,一轮结束最小/大值的排在首位。依次比较第二位元素至末尾,最后比较n-1与n位。
public static void selectSort(int[] arr)
 {
  for (int x=0; x<arr.length-1; x++)
  {
   for (int y=x+1; y<arr.length; y++)
   {
    if(arr[x] > arr[y])
    {
     int tem=0;
     tem = arr[x];
     arr[x]=arr[y];
     arr[y]=tem;
    }
   }
  }
}

5、冒泡排序:

相邻两元素比较,1和2, 2和3,。。。n-1和n。一轮结束最小/大值到最后,再下一轮排列1到n-1。
 public static void bubbleSort(int[] arr)
 {
  for (int x=0; x<arr.length-1; x++)
//外层循环理解为需要多少个内层循环。
  {
   for (int y=0; y<arr.length-x-1; y++)
   {
    if(arr[y] > arr[y+1])
    {
        int tem=0;
        tem = arr[y];
        arr[y]=arr[y+1];
        arr[y+1]=tem;
    }
   }
  }
 }
以上方法好记,但是效率不高,因为是数组。可以改进方法使用角标index。实际开发使用的是java.util.* 包的功能Array.sort(arr);

6、折半查找:前提是数组是有序排列

原理:查找的元素每次都跟中间角标数组元素比较,若小於则查找左边, 若大於则查找右边,一层层深入。
衍生应用,在顺序数组中插入一值,保持排序。
代码示例:
 public static int halfSearch(int[] arr, int key)
 {
    int max, min, mid;
    min = 0;
    max = arr.length-1;
    mid = (min+max)/2;

    while (key != arr[mid])
    {
        if (key < arr[mid])
        {
            max = mid-1;
        }
        else if (key > arr[mid])
        {
             min = mid+1;
        }
        if(min>max)//此处判断超出范围
            return -1;
        mid = (min+max)/2;
    }   
    return mid;
 }

7、以数组的方式转换16进制。

public static void toHex2(int num)
{
    char[] chs = {'0','1','2','3',
                '4','5','6','7',
                '8','9','A','B',
                'C','D','E','F'};
    char[] ret = new char[8];
    int pos = 0;
    while(num != 0)
    //这里用while的目的是判断num为零后就不再存储,这样取出时就没有0的数。
    {
        int tem = num & 0xf;
        ret[pos++]=chs[tem];
        System.out.println(chs[tem]);

        num = num >>> 4;
    }
    for (int i=pos-1; i>=0; i--)
    {
        System.out.print(ret[i]+",");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章