数组前言数据结构分类 数据结构中数据按逻辑结构分为:线性结构、非线性结构 常用的线性结构有:线性表(顺序存储、链式存储)、栈、队列、双端队列、串(一维数组); 常见的非线性结构有:二维数组、多维数组、矩阵、散列表、树、堆、图。 线性结构的特征 集合中必存在唯一的一个”第一个元素”; 集合中必存在唯一的一个”最后的元素”; 除最后元素之外,其它数据元素均有唯一的”后继”; 除第一元素之外,其它数据元素均有唯一的”前驱”。 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 如(a0,a1,a2,…..,an),a0为第一个元素,an为最后一个元素,此集合为一个线性结构的集合。 非线性结构,其逻辑特征是一个节点元素可能有多个直接前驱和多个直接后继。 线性数据结构存储方式 顺序存储结构:顺序表 链式存储结构:链表 常用线性数据结构 常用的线性结构有:线性表(顺序存储、链式存储)、栈、队列、双端队列、串(一维数组)。 线性表(Linear List)就是数据排成像一条线一样的结构,数据只有前后两个方向。 线性表分为顺序存储和链式存储。 按照人 ...
数组的排序前言排序概念 排序是将一组数据,依据指定的顺序进行排列的过程。 排序是算法中的一部分,也叫排序算法。算法处理数据,而数据的处理最好是要找到他们的规律,这个规律中有很大一部分就是要进行排序,所以需要有排序算法。 常见的排序算法分类 排序分为:内部排序和外部排序。 内部排序:是将需要处理的所有数据加载到内存中进行排序; 外部排序:当数据量过大,无法全部加载到内存中,需要借助外部存储(文件、磁盘等)进行排序。 交换排序(冒泡排序、快速排序) 选择排序(选择排序、堆排序) 插入排序(插入排序、希尔排序) 归并排序 桶排序、 计数排序、基数排序 算法稳定性 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面,则这个排序算法是稳定的。 如何分析算法分析算法的执行效率 最好、最坏、平均情况时间复杂度。 时间复杂度的系数、常数和低阶。 比较次数,交换(或移动)次数。 分析排序算法的稳定性 概念:如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 稳定性重要性: ...
数组的查找线性查找概念 线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。 元素序列的排列可以有序,也可以无序。 代码实现12345678910111213141516171819202122232425262728293031323334353637383940public class Test01 { public static void main(String[] args) { //线性查找 int[] arr = {45, 62, 15,62, 78, 30}; int index = sequentialSearch01(arr, 62); System.out.println("指定元素首次出现的下标位置:" + index); List<Integer> indexList = sequentialSearch02(arr, 62); System.out.println("指定元素出现的下标 ...
标识符 含义:给类、变量、方法、接口取名字的时候使用到的字符序列 组成:大小写字母 、数字、$、_、中文 注意事项: 不能以数字开头 区分大小写字母 不能使用除了$和_以外的特殊符号 不能使用Java的关键字 考虑到编码问题不要使用中文 关键字 含义:Java给我们提供的具有特殊意义的单词 经验:不用记,后续会逐一学习每个关键字到底是怎么使用的 ps:public(公有的)、static(静态的)、void(无返回值) 变量 含义:在程序执行过程中,可以发生改变的量 基本数据类型 byte(字节型):1字节 short(短整型):2字节 int(整型):4字节 long(长整型):8字节 float(单精度浮点型):4字节 double(双精度浮点型):8字节 char(字符型):2字节 boolean(布尔型):4字节 注意: boolean单独使用时是4个字节,boolean数组中元素是占用1字节 char的数据是使用单引号括起来 取值范围 byte:-128~127 int:-21亿~21亿 char:0~65535 基本数据类型的转换 自动转型:取值 ...
深入类加载机制初识类加载过程使用某个类时,如果该类的class文件没有加载到内存时,则系统会通过以下三个步骤来对该类进行初始化 1.类的加载(Load) → 2.类的连接(Link) → 3.类的初始化(Initialize) 类的加载(Load):将类的class文件读入内存,并为之创建一个java.lang.Class的对象,此过程由类加载器(ClassLoader )完成 类的连接(Link):将类中的数据加载到各个内存区域中 类的初始化(Initialize):JVM负责对类进行初始化 深入类加载过程类的完整生命周期 :加载、连接(验证、准备、解析)、初始化、使用、卸载 加载 通过一个类的全限定名来获取其定义的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在堆中生成一个代表这个类的Class对象,作为方法区中这些数据的访问入口 注意: 相对于类加载过程的其他阶段而言,加载阶段是可控性最强的阶段,因为程序员可以使用系统的类加载器加载,还可以使用自己的类加载器加载,在这里我们只需要知道类加载器的作用就是上面虚拟机需要完成的三件事 ...
面向对象概念 现实生活: 类:抽象的概念,把具有相同特征和操作的事物归为一类 先有实体,再有类的概念 代码世界: 类:抽象的概念,把具有相同属性和方法的对象归为一类 编写顺序:先有类,再创建对象 类的作用:类相当于一个模板,刻画出具有相同属性和方法的对象 类 类中只有属性和方法 属性也叫做全局变量,属性分为成员变量和静态变量 方法分为成员方法和静态方法 1234567891011121314151617public class 类名{ //属性也叫做全局变量,分为成员变量和静态变量 //成员变量 数据类型 变量名; //静态变量 static 数据类型 变量名; //方法分为成员方法和静态方法 //成员方法 访问修饰符 返回值类型 方法名([参数]){} //静态方法 访问修饰符 static 返回值类型 方法名([参数]){}} 对象 创建对象的语法:类名 对象名 = new 类名(); ...
集合含义 集合是Java API所提供的一系列类,可以用于动态存放多个对象 (集合只能存对象) 集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类) 集合类全部支持泛型,是一种数据安全的用法。 集合与数组的不同 数组:一旦初始化后长度不可变,元素类型受限定(String类型的数组只能装String的数据),数组可以存储基本数据类型 集合:长度可变的序列,元素类型不受限定(一个集合可以存储多个数据类型的元素),集合只能存储引用数据类型 Collection家族List接口 特点:有序且可重复(因为List接口中添加了许多针对下标操作的方法) 实现类: ArrayList LinkedList Vector Stack Set接口 特点:无序且不可重复 实现类: HashSet LinkedHashSet TreeSet Map家族 实现类: HashMap LinkedHashMap Hashtable ConcurrentHashMap TreeMap Properties ...
123456public abstract class AbstractList<E>{ //外部操作数 //添加元素、删除元素时会++,因为添加、删除会导致集合中的元素个数发生改变 protected transient int modCount = 0;//4} 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103public class ArrayList<E> extends AbstractList<E> implements List<E>{ //数据容器 transient Object[] elemen ...
123456public abstract class AbstractList<E> extendsAbstractCollection<E>implements List<E> { //外部操作数 protected transient int modCount = 0;//0}public abstract class AbstractSequentialList<E> extends AbstractList<E> {} 12345678910111213141516171819202122232425262728293031323334353637383940414243public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>{ //元素个数 transient int size = 0;//0 //第一个节点 ...