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]+",");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章