文章目录
文章 | 链接 |
---|---|
Java语法 | https://blog.csdn.net/weixin_45606067/article/details/107049186 |
一维数组与二维数组、内存解析 | https://blog.csdn.net/weixin_45606067/article/details/107049178 |
面向对象(1/3)类和对象 | https://blog.csdn.net/weixin_45606067/article/details/108234276 |
面向对象(2/3)封装性、继承性、多态性 | https://blog.csdn.net/weixin_45606067/article/details/108234328 |
面向对象(3/3)抽象类、接口、内部类、代码块 | https://blog.csdn.net/weixin_45606067/article/details/108258152 |
异常处理 | 待更新 |
多线程(1/2) | https://blog.csdn.net/weixin_45606067/article/details/107067785 |
多线程(2/2) | https://blog.csdn.net/weixin_45606067/article/details/107067857 |
常用类 | https://blog.csdn.net/weixin_45606067/article/details/108283203 |
枚举与注解 | 待更新 |
集合(1/5)Collection、Iterator、增强for | https://blog.csdn.net/weixin_45606067/article/details/107046876 |
集合(2/5)List、ArrayList、LinkedList、Vector的底层源码 | https://blog.csdn.net/weixin_45606067/article/details/107069742 |
集合(3/5)set、HashSet、LinkedHashSet、TreeSet的底层源码 | |
集合(4/5)Map、HashMap底层原理分析 | https://blog.csdn.net/weixin_45606067/article/details/107042949 |
集合(5/5)LinkHashMap、TreeMap、Properties、Collections工具类 | https://blog.csdn.net/weixin_45606067/article/details/107069691 |
泛型与File | https://blog.csdn.net/weixin_45606067/article/details/107124099 |
IO流与网络编程 | https://blog.csdn.net/weixin_45606067/article/details/107143670 |
反射机制 | 待更新 |
Java8新特性 | https://blog.csdn.net/weixin_45606067/article/details/107280823 |
Java9/10/11新特性 | 待更新 |
一、数组
1.数组的理解:
数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
2.数组相关的概念:
数组名
元素
角标、下标、索引
数组的长度:元素的个数
3.数组的特点:
- 数组是序排列的。
- 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型。
- 创建数组对象会在内存中开辟一整块连续的空间。
- 数组的长度一旦确定,就不能修改。
4.数组的分类:
①照维数:一维数组、二维数组、。。。
②照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。
5.数据结构:
1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存储结构:
- 线性表:顺序表(比如:数组)、链表、栈、队列
- 树形结构:二叉树
- 图形结构
- 算法
- 排序算法
- 搜索算法
二、一维数组
1.一维数组的声明与初始化
int num;//声明
num=10;//初始化
int id = 1001;//声明+初始化
int[] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
int[] arr4 = {1,2,3,4,5};//类型推断
2.一维数组元素的引用
通过角标的方式调用。
数组的角标(或索引从0开始的,到数组的长度-1结束)
name[0]= “zhangsan”;
name[1]= “lisi”;
name[2]= “wangsu”;
name[3]= “sunliu”;
name[4]= “jerry”;//charAt(0)
3.数组的属性:length
System.out.println(names.length());
数组一旦初始化,其长度就是确定的,arr.length
数组长度一旦确定,就不可改变;
4.一维数组的遍历
for(int i =0;i<names.length;i++){
System.out.println(name[i]);
}
5.一维数组元素的默认初始化值
数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0 或 ‘\u0000’
数组元素是boolean型:false
数组元素是引用数据类型:null
6.一维数组的内存解析
三、二维数组
1.如何理解二维数组
数组属于引用数据类型。
数组的元素可以是引用数据类型。
一个一维数组A的元素如果还是一个一维数组类型的,则次数组A称为二维数组。
2.二维数组的声明与初始化
int[] arr =new int[]{1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
int[][] arr2 = new int[3][2];
//动态初始化2
int[][] arr3 = new int[3][];
//也是正确写法
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
3.如何调用二维数组元素
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);
4.二维数组的属性
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4
5.遍历二维数组元素
for (int i = 0; i < arr4.length; i++) {
for (int j = 0; j < arr4[i].length; j++) {
System.out.println(arr4[i][j]);
}
}
6.二维数组元素的默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[4][3];
外层元素: arr[0],arr[1]等
内层元素: arr[0][1],arr[1][2]等
数组元素的默认初始化值
针对于初始化方式一:比如: int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如: int[][] arr = new int[4][];
外层元素的初始化值为: null
内层元素的初始化值为:不能调用,否则报错。
7.二维数组的内存结构
四、数组中设计的常见算法
1.数组元素的赋值(杨辉三角、回形数等)
2.求数值型数组中元素的最大值、最小值、平均数、总和等
3.数组的复制、反转、查询(线性查找、二分查找)
4.数组元素的排序算法(十大排序)
- 选择排序
- 直接排序、堆排序
- 交换排序
- 冒泡排序、快速排序
- 插入排序
- 直接插入排序、折半插入排序,Shell排序
- 归并排序
- 桶式排序
- 基数排序
排序算法性能比较
五、Arrays工具类的使用
java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法
public static void main(String[] args){
//判断两个数组是否相等
int[] arr1 = new int[] { 1,2,3,4 };
int[] arr2 = new int[] { 1,3,2,4 };
System.out.println(Arrays.equals(a, b));//false
//输出数组信息
System.out.println(Arrays.toString(arr1));
//将指定值填充到数组之中
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));//[10,10,10,10]
//对数组进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));//[1,2,3,4]
//二分法查找
int arr3 = new int[]{-98,-34,2,34,66,79,106,210,333};
int index = Arrays.binarySearch(arr3,210);
System.out.println(index);
}
六、数组中的常见异常
一旦程序出现错误,程序就终止。
public static void main(String[] args){
//1 数组角标越界的异常:ArrayIndexOutOfBoundsException
int[] arr =new int[]{1,2,3,4,5};
for(int i = 0;i<= arr.length;i++){
System.out.println(arr[i]);
}
System.out.println(arr[-1]);
//2 空指针异常:NullPointerException
//情况一:
int[] arr1 = new int[]{1,2,3};
arr1 = null;
System.out.println(arr1[0]);
//情况二:
int[][] arr2 = new int[4][];
System.out.println(arr2[0][0]);
//情况三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());
}
好了,我亲爱的读者朋友,以上就是本文的全部内容了!!!
觉得有点用记得给我点赞哦!
通过坚持不懈地学习,持续不断地输出,你的编程基本功算得上是突飞猛进。
为了帮助更多的程序员,专注于分享有趣的 Java 技术编程和有益的程序人生。一开始,阅读量寥寥无几,关注人数更是少得可怜。但随自己的不断努力,阅读量和关注人都在猛烈攀升。
绝对不容错过,期待与你的不期而遇。