1.数组的概念:
一组相同类型的数据堆积在一起
2.数组的声明:
1)数据类型 【】 数组名;
2)数据类型 数组名【】;(不推荐)
注:数据类型
可以使简单数据类型,也可以使引用数据类型
简单数据类型在内存中的值为零值(boolean:false,int:0,Double:0,0),引用数据类型在内存中的默认值为null。
简单数据类型在内存中存储的是字面量,引用数据类型在内存中存储的第堆区中的地址
3)初始化
1))动态初始化
int【】 arr=new int【4】;//在堆区中开辟4个int类型的空间
将int类型的空间赋值为0
在栈区中声明数组变量,并将变量所指向内存置为null
将堆区中开辟的空间的首地址赋值给栈区的变量空间存储
int【】 arr=new int[]{1,2,3};//将括号内的值依次放置到堆区中存储。
2))静态初始化
int【】 arr={1,2,3};//静态初始化只能在声明数组时对其赋值。例:
int【】 arr;
arr={1,2,3};//错误
arr=new int[4]{1,2,3,4};//错误;不能指定长度
注:数组的元素是自动初始化的,初始化的值为0值。
4)访问方式
1))访问数组的元素:
语法:数组名【下标】,下标从零开始
数组的长度,数组名。length
数组的遍历:将数组的元素一个一个的取出
注:(System.exit(0) 终止JVM的运行,非0的状态码表示异常终止)
5)数组的复制与动态扩展算法
1))数组的赋值
例:int【】 arr1=new int【】{1,2,3};
int【】 arr2=arr1;//arr1和arr2指向同一个数组对象,数据对象没有隔离性。
2))两个不同的数组
例:
int【】 arr=new int【】{1,2,3};
int【】 arr1=new int【arr.length】;//使用原数组的长度定义新数组,复制了空间,赋值内容使用循环遍历
3))Object的clone()方法
4))工具类 Arrays的API
5))数组拷贝效率更高的2中方式
1)))Static void System.arraycopy(Object[] arc,int srcpost,object[] dest,int destpost,length);//src:原数组,srcpost:原数组拷贝元素的起始位置,dest:目标数组,destpost:将原数组的元素拷贝到目标数组的第几个位置;length:将原数组的多少个元素拷贝到目标数组;object:对象类型,一切皆对象。
注:该方法由java的Api提供,底层由c++实现的,效率高,比for循环遍历拷贝的效率高
2)))Arrays.copyof(original,newLength)
src:原数组,newLength:新数组的长度
例:自拷贝(空间)扩容
String[] str=new String[]{"a","b","c"};
str=Arrays.copyof(str,str.length+1);//[a,b,c,null]
注:此时的str与原str的引用地址不一样,但堆区中里面的元素的地址仍指向同一对象,属于浅拷贝。在java中只有I/O属于深拷贝
2.总结:
先写子类,再写父类;先写方法的调用,再写方法的定义
定义参数时,优先考虑八大基本数据类型
当定义变量的需求过多,优先考虑数组类型
定义方法:根据逻辑定义功能
3.排序
1)概念:让数据有序的存储
2)分类:八大排序(选择,快速,冒泡,插入,归并和堆)
1))选择排序
1)))原理:固定一个位置,与其他位置作比较,满足条件交换位置
使用i表示第一个数据:0~arr.length-2
使用j表示后面部分的数据:i+1~arr.length-1;
(j<arr.length,j++;i>j交换)
2))冒泡:
1)))原理:总是,相邻的两个位置作比较,如果满足条件,交换位置
注:i表示次数,0~arr.lenth-2
j表示比较的位置,0~arr.lenght-i-1
j=1 j<arr.length-i j++
if j-1>j 交换
3))插入:
1)))原理:将数组分成两段,一段放大的数据,一段放小的数据
注:j代表需要插入的元素的位置,
1~arr.lenght-1
i代表前一部分每一个元素的位置 0~j-1
示例:
for(int j=1;j<arr.length;j++){
int temp=arr[j];
int i=j-1;
for(;i>=0;i--){
if(arr[i]>temp){
arr[i+1]=arr[i];
}else{
break;
}
}
arr[i+1]=temp;
}
4.递归
1))本质:自己调用自己
2))递归是一种算法,基本思想:对于一个复杂的问题,将原问题分解为若干个相对简单的子问题,继续下去直到简单的问题能够解决求解,也就是找到问题的出口。
3))关键因素:
递归的出口
递归逐步的向出口推进
4))递归的应用场景:
当一次运算无法计算出结果,而且是自己调用自己,只有找到出口才拿到结果。然后返回来进行下一步的运算。
5))递归的特点:
递归的时候,按照递归的深度分配全部的临时变量,栈开销很大,性能较低,要注意不能超越栈空间的大小。并且要给出一定的结束条件,否则,会造成栈溢出。
分享到:
相关推荐
在本Java学习笔记中,我们将深入探讨数组和排序算法这两个核心概念,它们是任何程序员学习Java编程时的基础。数组是存储固定数量同类型元素的数据结构,而排序算法则是对数组中的元素进行排列的方法。让我们详细了解...
### Java数据结构与算法学习笔记知识点详解 #### 一、数据结构概述 ...总结而言,本学习笔记覆盖了Java数据结构和算法的基础知识,通过深入理解这些概念和技术,可以帮助开发者更加高效地处理数据并解决实际问题。
本文基于《Java数据结构与算法》的学习笔记,旨在帮助读者更好地理解和掌握这些核心概念。 #### 二、数据结构概述 数据结构是指一组数据的集合以及它们之间的关系,以及在这组数据上定义的操作。常见的数据结构包括...
Java 是一种广泛使用的编程语言,本资源摘要提供了 Java 学习笔记的关键要点,涵盖了 Java 主函数解析、Java 学习注意事项、JDK 和 JRE 的区别、变量、运算符、控制结构、数组、排序、面向对象编程、继承、多态、...
算法导论学习笔记 本资源是对《算法导论》的学习笔记,涵盖了算法的基础知识、算法分析、...本资源提供了算法基础知识、算法分析、函数的增长、递归式等方面的学习笔记,旨在帮助读者深入了解算法的基本概念和技术。
【树状数组vaWeb-m开发笔记】是一份深入探讨JavaWeb开发中树状数组应用的文档,主要针对Java程序员提供关于高效数据结构和算法在实际项目中的应用指导。树状数组,又称线段树(Segment Tree),是计算机科学中一种...
4. **数组**:一维、二维数组的声明、初始化和操作,以及数组的应用场景。 5. **方法**:定义、调用方法,参数传递(值传递和引用传递),返回值,递归方法。 6. **异常处理**:理解异常的概念,使用try-catch-...
Java中,数组可以直接声明并初始化,例如`int[] arr = new int[10];` 2. **链表**:在链表中,每个节点包含数据和指向下一个节点的引用,适合频繁的插入和删除操作,因为它们不需要移动元素。Java中,LinkedList类...
1. **初始化**:将字符串按顺序存储为初始排列。 2. **生成下一个排列**:每次生成下一个排列时,从右向左找到第一个可以进行交换的位置,并与其后方的最小值进行交换,然后将该位置右侧的子串反转。 3. **重复步骤2...
1. **初始化状态**:创建一个二维数组`dp`,其中`dp[i][j]`表示使用`i`个0和`j`个1所能组成的最多字符串数量。 2. **遍历字符串**:遍历每一个字符串`s`,计算出它的0和1的数量。 3. **状态转移**:更新`dp`数组,...
- **变量与常量:** 掌握变量声明、初始化以及常量定义的方法。 - **算术运算:** 理解并运用算术运算符。 - **条件运算:** 使用比较运算符和逻辑运算符进行条件判断。 - **循环控制:** 学习使用`if`、`switch`、`...
了解数组的创建、初始化、遍历以及如何处理数组越界问题至关重要。 2. 链表:链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由节点组成,每个节点包含数据和指向下一个节点的引用。...
Java具有多种特性,包括简单性、面向对象、平台无关性、健壮性、安全性、多线程支持以及动态性。这些特性使得Java不仅易于学习,而且能够构建高度复杂的应用程序。 **1.5. 开发环境搭建与配置** 为了开始Java编程...
### 关于算法导论的学习笔记知识点汇总 ...通过以上章节的学习,读者可以深入了解算法的基本概念、分析方法以及递归式的求解技巧。这些知识不仅对理论研究非常重要,也是实际编程中不可或缺的基础。
要证明一个性质是循环不变量,需要证明三个条件:初始化(在循环开始前为真)、保持(每次循环后仍然为真)和终止(循环有限次终止后,该性质依然成立)。 2. 时间复杂度的分析:时间复杂度是对算法运行时间的抽象...
1. **递归式的概念**:递归式是一种数学表达方式,用于描述函数在较小输入情况下的行为,进而推导出函数的整体行为。 2. **递归式的求解方法**: - **代换法**:首先猜测递归式的解,然后通过数学归纳法证明该猜测...
初始化二维数组可以采用显式初始化的方式,如`int a[4][2]={{1,2},{23,43},{-1,2},{31,3}}`。 #### 三、字符数组和字符类型 字符数组用于存储字符串,而字符类型用于处理单个字符。 ##### 字符常量定义 字符常量...
8. **一维数组的声明与初始化** - 一维数组的声明形式为:`类型[] 数组名` 或 `类型 数组名[]`。 - 初始化时需要指定数组长度,如:`int[] arr = new int[10];`。 9. **数组的使用** - 数组元素可以通过索引访问...
8. **数组.doc**:Java中的数组是存储同类型元素的集合,包括一维数组、多维数组以及数组的操作,如声明、初始化、遍历和数组作为参数传递等,都是数组章节的重点。 9. **final修饰符与类型转化.doc**:final关键字...
- **Jdk (Java Development Kit)**:Java开发工具包,包含了编译、运行Java程序所需的各种工具,例如`javac`(Java编译器)、`java`(Java解释器)以及其他辅助工具,比如调试器和文档生成工具等。 - **Jre (Java ...