栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

图解数据结构和算法——数组篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图解数据结构和算法——数组篇

数组

数组的特征

数组的声明和创建 数组的封装

自定义数组

增——向数组中添加元素删——删除数组中的元素改——修改数组中的元素查——在数组中查找元素 测试 复杂度分析

数组的特征

什么是数组:

数组是内存中一片连续的内存空间数组可以根据索引下标非常快速地定位到某个元素但是新增,删除元素的时候需要移动元素位置以保证其连续,效率会变低
数组的声明和创建

java语言中提供的数组是用来存储固定大小的同类元素java中可以使用两种方式来声明数组

	dataType[] arr
	dataType arr[]

同样,java中数组的创建方式同样有两种

	dataType[] arr=new dateType[arraySize];
	dateType[] arr={value0,value1,value2,...}; 
数组的封装

数组最大的优点就是快速查询

自定义数组
public class Array {
	private int[] data;
	//数组的大小
	private int size;
	}

自定义数组的构造方法

	//构造函数
	public Array(int n) {
		data=new int[n];
		size=0;
	}
	//无参构造函数
	public Array() {
		//默认大小为10
		this(10);
	}

基本功能

	//获取数组的容量
	public int getCapacity() {
		return data.length;
	}
	
	//获取数组中的个数
	public int getSize() {
		return size;
	}
	
	//判断数组是否为空
	public boolean isEmpty() {
		return size==0;
	}
	public String toString() {
		return Arrays.toString(data);
	}

数组的扩容

	//数组扩容
	public void resize(int newCapacity) {
		int[] newdata=new int[newCapacity];
		for(int i=0;i 
增——向数组中添加元素 

向指定位置添加元素

	//向数组任意位置添加元素
	public void add(int index,int e) {
		//判断输入的index是否合法
		if(index<0 || index>size) {
			throw new RuntimeException("index is not 0=index;i--) {
			data[i+1]=data[i];
		}
		data[index]=e;
		size++;	
	}

这样我们就可以通过index的值来向数组头尾添加元素

	public void addLast(int e) {
		add(size,e);
	}
	
	//向数组的头部添加元素
	public void addFirst(int e) {
		add(0,e);
		
	}
删——删除数组中的元素

从数组中删除index位置上的元素,返回删除元素的值

//从数组中删除index位置上的元素,返回删除元素的值
	public int remove(int index) {
		if(index<0 || index>size) {
			throw new RuntimeException("index is not 0 
改——修改数组中的元素 

修改index索引位置的元素

	//修改index索引位置的元素
	public void set(int index,int e) {
		if(index<0 || index>size) {
			throw new RuntimeException("index is not 0 
查——在数组中查找元素 

获取index索引位置的元素

	//获取index索引位置的元素
	public int get(int index) {
		if(index<0 || index>size) {
			throw new RuntimeException("index is not 0 
测试 
public class codeArrayMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Array arr=new Array(5);
		//向头插入两个元素
		arr.addFirst(1);
		arr.addFirst(2);
		//判断数组是否为空
		System.out.println(arr.isEmpty());
		//查找元素
		System.out.println(arr.findE(2));
		System.out.println(arr.toString());
		//向数组末尾添加两个元素
		arr.addLast(3);
		arr.addLast(4);
		System.out.println(arr.toString());
		//向指定位置插入元素
		arr.add(1,7);
		arr.add(2, 9);
		System.out.println(arr.toString());
		//修改index索引位置元素
		arr.set(2, 10);
		System.out.println(arr.toString());
	}
}

复杂度分析

时间复杂度
原则:忽略常数项、忽略第次项、忽略系数
时间复杂度由小到大依次为:O(1)2n)2)3)k)n)添加元素时间复杂度:O(n)删除元素时间复杂度:O(n)查找元素时间复杂度:O(n)改和查,已知索引O(1),未知索引O(n)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号