Java学习(第二周)

本文介绍了Java中的二维数组,包括声明、初始化和元素访问。接着讨论了排序算法的时间复杂度和稳定性,举例说明了冒泡排序和快速排序。此外,概述了面向对象编程的基本概念,如类、对象、属性和方法,以及成员变量和局部变量的区别。
摘要由CSDN通过智能技术生成

一、数组

1、二维数组

(1)理解:可以将其看作一维数组的嵌套使用,将线性图形变成平面表格似的东西。

>其实,从数组底层的运行机制来看,其实没有多维数组

(2)声明和初始化

①静态初始化:数组变量的赋值与数组元素的赋值操作同时进行

int[ ][ ] arr1 = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};(内外层元素任意输入设定)

  ②动态初始化:数组变量的赋值与数组元素的赋值操作分开进行

方式1:string[ ][ ] arr2 = new string[3][4];(外层3个元素,内层4个元素。均已固定)

方式2:double[ ][ ] arr3 = new double[2][ ];(外层确定,内层未确定,调用时可灵活输入元素)

注:其他正确写法

int arr4[ ][ ] = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};

int[ ] arr5[ ] = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};

int arr6[ ][ ] = {{1,2,3,4},{5,6},{7,8,9}};    //类型推断

string arr7[ ][ ] =new string {{1,2,3,4},{5,6},{7,8,9}}; 

除了列出的正确的都是错的,如 int[ ][ ] arr1 = new int[ ][3]{{1,2,3},{4,5,6},{7,8,9}};

(3)数组元素的调用

针对arr1来说,外层元素{1,2,3,4},{5,6},{7,8,9}  内层元素1,2,3,4,5,6,7,8,9

①调用内层元素

system.out.println(arr1[0][0]);//输出1

system.out.println(arr1[2][1]);//输出8

②调用外层元素

system.out.println(arr1[0]);//输出{1,2,3}的地址

③测试arr2,arr3

arr2[0][1] = "Tom";

system.out.println(arr2[0][1]);//仅输出Tom

system.out.println(arr2[0]);//输出地址值

arr3[0] = new double[4];

arr3[0][0] = 1.0;//赋值

(4)数组的长度

system.out.println(arr1.length);//3

system.out.println(arr1[0].length);//4

system.out.println(arr1[1].length);//2

system.out.println(arr1[2].length);//3

(5)如何遍历数组

 二、排序

衡量排序算法的优劣:

Ⅰ.时间复杂度:分析关键字的比较次数和记录的移动次数

Ⅱ.空间复杂度:分析排序算法中需要多少辅助内存

> 一个算法的空间复杂度S(n)定义为该算法所消耗的存储空间,它也是问题规模n的函数

Ⅲ.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是最稳定的

 

 1、冒泡排序(最简单,时间复杂度:O(n^2))

①比较相邻的元素,如果第一个比第二个大(升序),则交换位置

②对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

③针对所有的元素重复以上的步骤,除了最后一个,直到排序完成。

 2、快速排序(最快的,时间复杂度O(nlog(n)))

①从数列中挑出一个元素,称为 “基准”(pivot);

②重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

③递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

④递归的最底部情形,是数列的大小时零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为再每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

640?wx_fmt=gif

三、面向对象

面向对象可以帮助我们从宏观上把握、从整体上分析整个系统

1、 三大主线

  >Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类

  >面向对象的特征:封装、继承、多态(、抽象)

  >其他关键字的使用:this、super、package、import、static、final、interface、abstract等

2、面向对象的程序运行

四、类的成员

类和对象概述

:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。

对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例 (instance)

可以理解为: => 抽象概念的人 对象 => 实实在在的某个人

1、成员变量与局部变量

>在方法体外,类体内声明的变量为 成员变量
>在方法体内部等位置声明的变量称为局部变量
上图中, static 可以将成员变量分为两大类,静态变量非静态变量。其中静态变量又称为类变量,非静态变量又称为实例变量或者属性。

2、方法

①方法 是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为 函数
②将功能封装为方法的目的是,可以 实现代码重用,减少冗余,简化代码
③Java 里的方法 不能独立存在 ,所有的方法必须定义在类里。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值