数组

1.数组的定义
概念:同一种类型数据的集合,其实数组就是一个容器。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
定义格式:
int [] arr = new int[2];
int arr[] = new int[2];
int [] arr = new int [] {3,4,5,6,7,8}; //[] 中不写长度。
int [] arr = {4,2,1,5,3,6};
2.数组的内存分配解特点
3.数组的操作常见问题
class ArrayDemo
{
public static void main(String[] args)
{
int [] arr = new int[3];
System.out.println(arr[3]);
//这个错误在编译时不会被发现,因为编译只检查语法有没有错误,在运行时,才会发现arr[3]是否为错误。
//ArrayIndexOutOfBoundsException:操作数组时,操作到了数组中不存在的角标。
}
}
class ArrayDemo
{
public static void main(String[] args)
{
int [] arr = new int[3];
System.out.println(arr[3]); //越界异常ArrayIndexOutOfBoundsException
}
}
class ArrayDemo
{
public static void main(String[] args)
{
int [] arr = new int[3];
arr = null;
System.out.println(arr[0]); //NullPointException 空指针异常:当引用没有任何指向值为null的情况下,该引用还在用于实体操作,就会发生这种异常。
}
}

4.数组的常见操作
//数组的遍历:
class ArrayDemo
{
public static void main(String[] args)
{
// int [] arr = new int[3];
System.out.println(arr); //会打印一个数组的地址值。

       //数组中有一个属性可以直接获取元素个数,length
       //使用方式:数组.length = 数组中元素的个数。
      int [] arr = {3,6,5,4,8,9};
     // int sum = 0;    //求和运算
     for(int x=0;x<arr.length;x++)
     {
          //sum +=arr[x];   //求和运算
          System.out.println("arr["+x+"]="+arr[x]+";");
      }
     printArray(arr);
 }
 //定义一个功能,打印一个数组
 public static void printArray(int[] arr)
 {
     for (int x = 0;x<arr.length;x++)
      {
           if(x!=arr.length-1)     //换行时的操作
               System.out.print(arr[x]+",");
           else
               System.out.println(arr[x]);
       }
  }

}

/*
给定一个数组{5,1,6,4,2,8,9}

1.获取数组中的最大值和最小值。
思路:
1.获取最值需要比较。每次都有一个较大的值,因为不确定所以需要存储

2.让数组中的每个值,和这个值比较,然后记录最大的值

3.当所有元素比较完成,就会有最大值

步骤:
1.定义变量,初始化任意一个元素。
2.通过循环语句对数组进行遍历
3.在变量过程中定义判断条件,如果遍历到的元素比变量中的大,就赋值给变量

定义一个功能:
明确结果:数组中的最大元素为int型
位置内容:一个数组。
*/
/class ArrayDemo2
{
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
int x = getMax(arr);
System.out.println(x);
}
public static int getMax(int[] arr)
{
int max= arr[0]; //初始化数组中的元素
for(int x=1;x<arr.length;x++)
{
if(arr[x]>max)
max = arr[x];
}
return max;
}
}
/
/class ArrayDemo2
{
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
int x = getMax(arr);
System.out.println(x);
}
public static int getMax(int[] arr)
{
int max=0; //初始化数组中数组的角标
for(int x=1;x<arr.length;x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
}
/
class ArrayDemo2
{
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
int x = getMin(arr);
System.out.println(x);
int y = getMax(arr);
System.out.println(y);
}
public static int getMin(int[] arr)
{
int min= arr[0]; //初始化数组中的元素
for(int x=1;x<arr.length;x++)
{
if(arr[x]<min)
min = arr[x];
}
return min;
}
public static int getMax(int[] arr)
{
int max = arr[0];
for(int x = 0;x<arr.length;x++)
{
if(arr[x]>max)
max = arr[x];

         }
         return max;
    }

}
//只适用于数值型数组。

排序:选择排序:第一个元素和第二个,第三个,第四个,一直到最后,第二个和第三个,,,,最小值会在第一位
排序:
选择排序:*****
****
***
**
*
内循环结束一次,最值出现在0角标位。
*/
/class ArrayDemo2
{
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
printArray(arr);
sortSelect(arr);
printArray(arr);
}
public static void sortSelect(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 temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
public static void printArray(int[] arr)
//定义打印功能。
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", “);
else
System.out.println(arr[x]+”]");
}
}
}

冒泡排序:相邻两个元素进行比较,如果符合条件换位。最大值会在最后,每进行一个循环,就会减少一个元素。
比选择排序性能高。:需要在堆内存中进行换位置,非常消耗资源,先在栈内存中进行换位置。
class ArrayDemo3
{
public static void main(String[] args)
{
int[] a = {9,4,8,3,5,6,1};
printArray(a);
bubbleSort(a);
printArray(a);
}
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++) //-x 每进行一次循环就会少一个元素,-1 防止越界。
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1) //arr.length表示数组的长度,arr.length-1表示这个数组的最 后一位。
System.out.print(arr[x]+", “);
else
System.out.println(arr[x]+”]");
}
}
}
希尔排序时最快的,三层循环,加位进算。
5.数组中的数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值