------- 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,就不会新创建数组,而是使用传递进来的数组。
所以创建一个刚刚好的数组最优,否则多创建数组,占内存。
为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删。