黑马程序员_java 数组笔记

------- android培训java培训、期待与您交流! ----------

以下仅为个人平时学习笔记,可能有有错误的地方,希望有看到者提出来,共同讨论,谢谢!

1.获得数组中最大值的基本方法(利用第三个变量存储较大值)
 private static int getArr_Max(int[] arr)
 {
  int temp = arr[0];//避免直接赋给temp的值大于数组中所有元素而得到错误结果的情况
  int len = arr.length;
  for(int i=0;i<len;i++)//此处相对于写"i<arr.length"可以提高代码效率
  {
   if(temp<arr[i])
   {
    temp=arr[i];
   }
  }
  return temp;
 }

*****************************************数组排序(从小到大)*********************************************
**注意:最快排序方法是:希尔排序

数组中元素多性能低的原因:
 每次符合条件都是在数组当中对数组的位置进行置换,而堆内存中换位置比较消耗资源.
 解决方法:将堆内存中的位置置换转换到栈内存中(置换脚标)
 **真实开发中用Arrays类中自带的排序方法

1.选择排序
 private static void selectOrder(int[] arr)//普通选择排序
 {
  int temp = 0;
  for (int i = 0; i < arr.length - 1; i++)
  {
   for (int j = i + 1; j < arr.length; j++)
   {
    if (arr[i] > arr[j])
    {
     temp = arr[i];
     arr[i] = arr[j];
     arr[j] = temp;
    }
   }
  }
 }

 private static void selectOrder2(int[] arr)//效率较高,较为节省资源的选择排序
 {
  int k;
  for (int i = 0; i < arr.length - 1; i++)
  {
   int temp = i;
   for (int j = i + 1; j < arr.length; j++)
   {
    if (arr[temp] > arr[j])
    {
     temp = j;
    }
   }
   if(temp!=i)
   {
    k=arr[temp];
    arr[temp]=arr[i];
    arr[i]=k;
   }
  }
 }

2.冒泡排序
 private static void buddlingOrder(int[] arr)
 {
  int temp;
  for (int j = 0; j < arr.length-1; j++)
  {
   for (int i = 0; i < arr.length-j-1; i++)
   {
    if (arr[i] > arr[i + 1])
    {
     temp = arr[i];
     arr[i] = arr[i + 1];
     arr[i + 1] = temp;
    }
   }
  }
 }

***************************************************数组中元素的查找*********************************************
1.int型数组的普通查找
 private static int getIndex(int[] arr,int key)
 {
  for(int i=0;i<arr.length;i++)
  {
   if(arr[i]==key)
   {
    return i;//返回数组中该元素第一次出现的位置
   }
  }
  return -1;//未找到返回-1
 }

2.int型数组的折半查找(数组必须为有序的)
 private static int getIndex_Half(int[] arr, int key)
 {
  int start = 0;
  int end = arr.length - 1;
  int mid = (start + end) / 2;
  if (arr[start] <= key && arr[end] >= key)
  {
   while (start <= end)
   {
    if (arr[mid] < key)
    {
     start = mid + 1;
    } else if (arr[mid] > key)
    {
     end = mid - 1;
    } else
    {
     return mid;
    }
    mid = (start + end) / 2;
   }
  }
  return -1;
 }

*********************************************二维数组***************************************************
二维数组的三种定义方式:
 int[][] x;
 int[] x[];
 int x[][];
int[][] arr = new int[2][];
在初始化一个二维数组时候,二维数组的第一维长度必须写。
第二维长度可以是不等的。
arr.length为二维数组长度2;
arr[0].length为一维数组长度(根据实际来定);
此时arr[0],arr[1]均未被初始化,默认为null,仅仅是持有两个数组的引用,所以赋值之前必须先初始化。
二维数组还可以如此初始化:int[][] a = {{1,2,3},{4,5,},{5,6,6,7,}};


****************************Arrays************************************
注意:将数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的。

toArray:
  1.集合转数组。当指定的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size。
  2.当指定类型的数组长度大于了集合的size,就不会新创建数组,而是使用传递进来的数组。
  所以创建一个刚刚好的数组最优,否则多创建数组,占内存。

为什么要将集合变数组?
  为了限定对元素的操作。不需要进行增删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值