数据结构与算法-01数组-01

数据结构与算法概述

什么是数据结构

**[数据结构[英语:data structure)]**是计算机中存储、组织数据的方式。

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。image-20241106131717029

什么是算法?

**[算法(Algorithm)]**是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

image-20241106132348265

什么是程序?

image-20241106133038929

开发工具

数据结构算法开发工具: idea
tips: 建议不要开启AI功能,自己去尝试理解算法,自己练一下才能真正理解。
image-20241106133422600

JDK: 1.8+
image-20241106133606549

常用刷题网站

力扣: 力扣 (LeetCode) 全球极客挚爱的技术成长平台

image-20241106133754365


数组

线性和非线性

线性: 除首尾,只有一个唯一前驱和后继。 数组,链表

line list

数组是什么?

数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。

image-20241106134739127

数组的特性

存储类型一致

数组中的类型一致。Java–面向对象 —>继承

A a = new B();

B extends A;

People[] a = new People[10];

a[i] = 小孩;

image-20241106135358331 image-20241106135540851
int[] a = new int[10];

空间长度固定

数组在内存中的空间是固定的,是在定义数组时指定。

image-20241106135809975
int[] a = new int[3];
int[] a = {1,5, 4};

定义数组的方式

  1. 定义数组,使用类型的初始化

    数据类型[ ] 引用名称 = new 数据类型[空间大小];

    int a[]={};

    int[] a = {};

    boolean x; //oracle jdk 1bye

    boolean[] x1; // int

    基本数据类型(整型): 0;

    浮点类型: 0.0

    引用类型: null

    int[] a = new int[10]; //定义长度为10的数组,数组中的每一个元素初始值为0。
    
  2. 定义数组并初始化

    int[] a = {1,3,4,5}; //定义数组初始化元素为大括号中的内容。
    
  3. 第三种方式

    int[] a = new int[]{1,2,3};
    

通过索引访问数组

通过数组的索引进行数据访问: a[index]

image-20241106200109834

image-20241106142335824

索引的范围

数组索引的范围: [ 0, a.length-1]

int[]a = new int[N+1];

索引起点: 0;

索引终点: a .length - 1;

常见异常

  1. NullPointException

    空指针异常: 访问的数据不存在。

    private int[] a;
    
    public void test(){
    	a[1] = 3;    
    }
    
  2. ArrayIndexOutOfBoundsException

    数组越界异常: 访问的索引越界

    int[] a = new int[10];
    a[10];
    

常见数组

  • 字符串
  • 对象数组
  • 哈希表

数组的优点

数组可以使用索引查询,其优势是查询快速

image-20241106144016239

数组的缺点

数组缺点: 数组一旦定义其长度就已经固定(数组容量不可变)。

动态数组

实现数组的自动扩容能力。

  • Vector
  • ArrayList

idea Debug设置

设置debug toolsbar

右键点击debug,弹出Customize Toolbar

image-20241106170310437·

点击"Customer Toolbar"

image-20241106170445035

添加强制进入代码内部的指令

image-20241106171040548

image-20241106171110241

image-20241106202743364

Debug指令

step over

image-20241106171601440

跳过当前断点到下一行代码。tips: 如果下一行是方法则不进入方法,跳过方法。

step into

image-20241106171631973

进入方法内。tips: idea默认step into只进入开发者自己写的方法内,无法直接进入源代码内部。

force step into

image-20241106171702524

强制进入方法体内。

Resume Program

image-20241106171814911

跳转到下一个断点。

可变数组

模拟完成ArrayList的创建。 MyArrayList。

image-20241106151707857

分析Java源代码

以Vector为例,之后分析ArrayList

定义接口(List)

image-20241106154000413
序号方法名称解释
1boolean add(E e)添加数据
2boolean contains(Object obj)集合中是否有此对象
3boolean equals(Object)对象是否相等
4void clear()删除集合中的数据
5boolean isEmpty()判断集合是否为空
6E get(int)根据索引获取集合中的元素
7int indexOf(Object)获元素在数组的位置
8E remove(int)根据位置删除某个元素
9sort(Compator<E>)对集合的数据进行排序
10E set(int, E)修改指定位置的数据
11int size()获取集合长度
12void sort(Comparable<? extends E)对集合中的元素进行排序

动态数组属性

定义对象数组Object[] elementData;

image-20241106153612316

初始化集合

初始化集合内的数组容量

image-20241106155512453

tips: 抛出的异常 IllegalArgumentException ,如果初始化数组的容量为负值则抛出异常。

image-20241106155918161
Vector默认数组的大小

Vector的默认数组大小10: new Vector();

    /**
     * Constructs an empty vector so that its internal data array
     * has size {@code 10} and its standard capacity increment is
     * zero.
     */
    public Vector() {
        this(10);
    }
ArrayList默认数组大小

ArrayList的默认数组为一个空数组。

image-20241106160659625

ArrayList是如何初始化数组的???-- 稍后再谈

数据操作

Vector为例说明集合是如何完成数据的增、删、改、插操作,稍后在研究ArrayList。

添加数据(add)

第一种情况: 数据量没有超过默认容量10;

Vector<Integer> v = new Vector<>();
v.add(1);

image-20241106172142759

第二种情况: 数据量超过10.

image-20241106172437828 image-20241106172909558
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值