总结-数组

2018220日星期二

数组概述

  1. 数组是一个容器,可以存储同一组数据类型的多个数据
  2. 数组是引用类型的,数组中的数据是存储在堆中的
  3. 在堆区中分配连续的存储空间,存储元素的值
  4. 每个数组都有一个引用名(数组名),引用数组,存储的是数组的首地址
  5. 数组元素有下标,下标是从0开始的,访问中间的元素用下标访问
  6. 数组有一个length属性,返回的是数组元素的个数
  7. 数组的有效下标位置是0 - length-1,如果下标没有在这个返回之内,就会报一个数组索引越界异常
  8. 数组的长度是固定不变的

数组的优缺点

  1. 优点:在内存中是连续存储的,因此遍历速度比较快
  2. 缺点:在内存中连续存储,因此在某下标处任意添加或删除元素时操作比较复杂

因为数组大小是固定不变的,因此当数组中添加的元素大于数组长度时,需要进行数组的扩容和复制.因此会造成内存的浪费.

数组的定义

①. 数据类型:

基本数据类型(如果美乳手动赋值的话是有默认值的):

Byte,short,int,long 默认值 0

Float,double 默认值 0.0

Char 默认值 \u0000(就是没有值)

Boolean 默认值

引用数据类型:,接口,数组 默认值 null

引用类型的数组中存储的是每个元素所引用的对象地址,不是对象本身

语法:数据类型 [] 数组名 = new 数据类型[数组长度]

 数据类型 数组名 [] = new 数据类型[数组长度]

②. 基本数据类型的数组

  1. int类型:int [] arr = new int [5];
  2. 给数组中的元素赋值:

动态赋值:在声明数组之后手动赋值

静态赋值:在声明数组的同时赋值

Int [] arr ={1,2,3,4,5,6}

静态赋值的时候代码不能拆成两行代码来写,只能用一行代码写

Int [] arr = new int []{1,2,3,4,5}

后面的中括号内不能写数组元素的个数,数组的长度由后面大括号内的元素个数决定.

  1. 数组的遍历:数组的遍历用for循环来遍历数组
  2. 父类类型数组可以引用子类类型对象=>多态
  3. 接口类型的数组,每个元素是引用实现类的对象=>多态

 

数组的扩容和复制

System.arraycopy(无返回值)

Arrays.copyOf(有返回值,返回值为新数组)

二维数组

数组的拍排序

冒泡排序:每次查找最大值,并放在数组的后面

For( int = a.length-1; i >0; i--) {  //比较的轮数

For(int j = 0; j < i ; j++) {  //比较的次数

If( a[ j ] > a[ j+1 ] ) {  //两数比较,大的向后排

Int temp = a[ j ];

a[ j ] = a[ j + 1];

a[ j + 1] = temp;

}

}

}

选择排序:每轮查找最小值,并放到数组的最前面

For( int i = 0 ; i < a.length - 1 ; i++ ) { //比较轮数

Int min = i ; //记录本轮比较中最小值下标

For ( int j = i + 1 ; j < a.length ; j++ ) { //比较的次数,查找最小值

if ( a [ min ] > a [ j ] ) {

min = j ;

}

}

If (min > i ) { //判断最小值是否在合适位置,如没有交换

Int temp = a [ min ] ;

a [ min ] = a [ i ];

a [ i ] = temp;

}

}

Arrays.sort(数组名); 此为静态方法,可对数组进行升序排序,以为是对数组本身进行操作,没有产生新的数组,所以此方法没有返回值;内部实现机制为快速排序法,选择排序法排序速度要优于冒泡排序法,快速排序法的苏姚要优于选择排序和冒泡排序;

数组的查找

顺序查找:从数组的第一个元素开始,依次比较,有相等,则比较结束

二分法查找:前提是从有序的升序的数组中查找

Java.util.Arrays.binarySearch(); 系统的二分法查找方法,如果有返回对应下标,如果没有则返回应该插入的下标-1

手写的二分法查找代码

Public static int binarySearch ( int [] arr , int key ) {

Int begin = 0 ; //开始下标

Int end = arr.length - 1 ; //结束下标

While ( begin >= end ) {

Int mid = (begin + end ) / 2; //查找中间元素

Int midValue = arr [ mid ];

If ( key == midValue ){

Return mid;

} else if ( key > midValue ) {

Begin = mid + 1;

} else {

End = mid - 1;

}

}

Return -1 ; //没找到的情况下返回 -1

}

 

Java.util.Arrays 提供了一组静态方法,实现了对数组的查找排序扩容

copyOf(); 扩容并复制数组

Sort(); 对数组进行升序排序

binarySearch() 对有序数组进行二分法查找

 

posted @ 2018-04-10 14:30  吃鱼的猫  阅读(112)  评论(0编辑  收藏  举报