数组与二分查找方法&冒泡排序&选择排序

1 数组
1.1 概述
保存一个数据可以定义一个变量, 如果需要保存100个数据呢? 可以使用数组
数组是用来保存同类型数据的容器
数组本质上就是内存中一块连续的存储空间

数组的定义:
	数据类型 []  数组名 = new  数据类型[数组的长度];
  1. 数据类型指定数组中存储元素的类型
  2. []表示它是一个数组
    如:
    int [] data = new int[100];
    char [] contents = new char[100];
    double[] nums = new double[100];
    Person[] persons = new Person[100];
    定义了一个数组data,可以存储100个int类型的数据
  3. int表示数组中元素的类型
  4. data是数组名, 本质上就是一个变量名
  5. 数组也是一种引用数据类型, data数组名(变量名)的数据类型: int []
  6. new运算符会在堆区分配一块连续的存储空间, 这块连续的存储空间可以存储100个int类型数据, 并且会把这块存储空间的起始地址赋值给data变量

有时,数组的定义格式也可以写为:
数据类型 数组名[] = new 数据类型[数组的长度];
如:
int data2[] = new int[5];

数组元素的访问
	数组为每个元素指定一个索引值,也称下标.
	这个索引值是从0开始的, 如data2数组的长度是5, 每个元素下标分别为: 0,1,2,3,4

为什么数组通过下标(索引值)可以访问数组元素??


数组的遍历
	for( int i = 0 ; i < data.length; i++){
data[i] = 456;

}

	for( int xx : data){
		只用于遍历,不能修改数组元素

}

静态初始化
	int [] data3 = new int[]{23,453,65};
	int [] data4 = {23,453,65};

1.2 数组作为方法参数
1.2.1 修改形参数组的元素值
1.2.2 修改形参数组

1.2.3 数组作为方法的返回值类型

1.2.4 main方法的参数(了解)
main(String [] args ){}
1.2.5 可变长参数
m1( 类型 … 参数名 ){
}

1.3 数组扩容
定义了数组后, 数组的长度就确定了, 数组存储元素的个数就确定了, 需求:想要存储更多的数据, 数组扩容

  1. 定义一个更大的数组
  2. 把原来数组的内容复制到新数组中
  3. 让原来的数组名指向新的数组

1.4 数组的特点
优点:
通过索引值快速访问每个元素,通过索引值可以计算每个元素的地址, 能够实现随机访问
缺点:
在 数组中插入/删除元素时, 需要扩容,复制元素,效率比较低

应用场景:
	对数据插入/删除操作较少,主要是以查询为主

1.5 对象数组
数组元素的类型是引用类型
对象数组的每个元素实际上存储的是对象的引用
persons[1] = new Person();
遍历对象数组, 访问每个对象的实例成员时, 注意避免出现空指针异常
1.6 二维数组
二维数组就是一维数组的数组
int [][] myArray = new int[5][];
myArray数组的每个元素是 int [] 类型
myArray[0] = new int[5];
二维数组的元素实际上存储的是一维数组的引用(起始地址)
二维数组的每个元素又是一个一维数组
掌握二维数组的定义, 遍历
1.7 Arrays工具类
static List
asList(T… a) 把数组转换为列表

static int binarySearch(int[] a, int key) 在数组a中查找 元素key,返回第一次出现的索引值,如果没有元素key返回负数
static int[] copyOf(int[] original, int newLength) 数组复制

atic String
deepToString(Object[] a) 把多维数组的元素转换为字符串

static void fill(int[] a, int val) 使用Val值填充a数组

static void parallelSort(int[] a) 并行排序,适应数据元素非常多的情况

static void sort(int[] a) , 排序

static String
toString(int[] a) 把数组的元素转换为字符串

1.8 算法
1.8.1 冒泡排序算法

1.8.2选择排序算法

1.8.3二分查找算法

代码:

  1. 掌握数组的定义,元素的访问, 能够通过循环遍历数组的每个元素
    定义一个长度为10的整数数组,从键盘上输入数组给数组的每个元素赋值
    data[i] = sc.nextInt()
  2. 定义一个方法, 返回数组中最大元素的值
    public static int getMax( int [] data ){}
  3.  定义一个方法, 返回数组中最大元素的下标
    

public static int getMax( int [] data ){}
4) 可变长参数
5) 定义一个方法,实现数组的逆序
6) 定义方法,实现在数组指定的位置插入元素
7) 定义一个User类,有用户名和密码两个属性
定义一个UserManager类, 该类中有一个用户数组属性
class UserManager{
User[] users;
//构造方法, 对users数组初始化
//定义方法, 向数组中添加用户对象
//定义方法, 判断用户对象是否在用户数组中
}
8) 二维数组的定义, 各个元素的遍历
9)算法在面试前掌握

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值