Java数据结构与算法01(笔记)

数据库


​ 数据结构整体

数据结构优点缺点
数组插入快(感觉有问题),如果知道下标,可以非常快速地存取查找慢,删除慢,大小固定
有序数组比无序的数组查找快删除和插入慢,大小固定
提供后进先出的存取存取其他项很慢
队列提供先进先出的存取存取其他项很慢
链表插入快,删除快查找慢
二叉树查找、插入、删除都快(如果树保持平衡)删除算法复杂
红黑树查找、插入、删除都快。树总是保持平衡的算法复杂
2-3-4树查找、插入、删除都快。树是平衡的。类似的树对磁盘存储有用算法复杂
哈希表如果关键字已知则存取极快。插入快删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分
插入、删除快,对最大数据项的存取很快对其他数据项存取慢
对现实世界建模有些算法慢且复杂

总结:以上数据结构除了数组之外都可以被认为是抽象数据结构(ADT)

术语:

记录:
  • 在数据库中,是指数据库中划分的单元,为存储信息提供了一个结构格式

  • Java语言(以及其他面向对象 语言)中,记录经常被表示为一个相应类的对象

字段:
  • 在数据库中,一条记录经常被划分为几个字段。一个字段保存某一种特定的数据
  • 一个实例中各个变量表示不同的数据字段。在Java语言中一个类对象的字段被称为字段(但在其他语言中叫做成员,如c++)
关键字:

一个关键字是一条记录中的一个字段,通过关键字可以对数据库执行许多操作。例如人事记录可以通过姓名进行排序

查找关键字:

在数据库中查找一条记录,需要指定记录的某一个字段为关键字(也可以称为查找关键字)。通过该关键字,可以访问整条记录内的所有字段。并且所有关键字都可以用作关键字。

数据结构

数据在计算机内存空间或磁盘中的组织形式

算法

完成特定任务的过程。在java中,算法经常通过类的方法实现

过程性语言:

缺点:

  • ​ 程序和现实世界缺乏对应关系

  • ​ 粗糙的组织结构(没有考虑到数据的可访问性,要么是局部变量被一个方法访问,要么是全局变量被所有方法访问。不能实现仅有部分方法可访问)

面向对象语言:
  • ​ 对象:类的实例。将计算机中的食物与现实生活中的食物联系更加紧密,解决了上面两个问题。

  • ​ 类:针对一个或者多个对象的说明(蓝图)

  • ​ 创建对象(实例化对象):使用关键字new来创建对象。创建对象的同时,可以将一引用存储到一个具有合适的类型的变量中

  • 引用存放的是对象的地址

    • 引用不是对象。引用变量存储了一个对象的地址,而这个对象实际上被存储在内存空间的其他某个地方。
    • 基本数据类型的变量对应的空间存储的是数值,而引用类型的变量对应的空间存储的是引用(即对象的地址)。前者未被赋值时不会保存数值(如果尝试使用,会报错),而后者未被赋值时会保存一个叫做null的特殊对象
  • 访问对象的方法:使用.运算符将一个对象同它的某一个方法(或字段)连接起来

  • 构造函数:初始化对象需要调用构造函数

面向对象的特性:

对象同时包含方法和字段

类是任意数目的对象的说明

创建一个对象,要讲关键字new和类的名称连用

调用一个对象的方法,要使用点运算符

4 java和c++的不同点
4.1 java是解释型语言,c++是编译型语言。
4.2 java是纯面向对象的语言,所有的代码(包括函数、变量)都必须在类中定义。而c++中还有面向过程的东西,比如全局变量和全局函数
4.3 c++支持多继承。java中的类支持单继承,不支持多继承,但是支持多重继承;java中的接口是多继承,类对接口的实现也是多实现
4.4 c++有指针,java没有指针
4.5.1 引用不同

​ 对于 类名 变量名;这条语句来说

​ c++中,实际上创建了对象,留出了这个对象的数据的空间

​ java中,只是创建了一个放置某一个对象的存储地址的空间。

4.5.2 赋值不同

​ 在c++中,b2=b1;是把b1对象的所有数据拷贝到另一个叫b2的对象中;而java中,这条语句是向b2拷贝了b1所指向的存储地址。现在b1和b21实际上指的是同一个对象,他们都是这个对象的引用。(java中如果想要从一个对象中复制数据到另一个对象中,必须保证一开始就有两个对象,然后分别拷贝每一个字段,等号不起复制作用)

4.5.3 new操作符

​ java :在java中任何创建对象的工作都必须使用到new,但是new在Java中返回一个引用

​ c++:返回一个指针

​ 释放空间(使用new向系统申请的空间,不再使用):

​ java:不需要担心,有垃圾收集机制(GC机制)。Java每隔一段时间就去查看每一块由new开辟的内存,看指向它的有效引用是否依旧存在。如果这个引用不存在,系统会自动将这块空间归入空闲内存区,这个过程叫做垃收集。几乎不可能出现“存储泄露”。

​ c++:需要开发自己管理内存,析构函数,使用delete。容易忘记删除存储空间,导致“存储泄露”,从而消耗系统资源

【析构函数:C++中析构函数是提供一个在对象删除前可以释放这个对象所占用的资源的机会,但是Java并未提供“析构函数”或者类似的概念。】

4.5.4 相等与同一

​ Java中,基本数据类型使用==是判断两个变量是否有相同的值,但是进行对象判断时,判断的是类的引用是否一致(是否指向同一个对象)。java判断两个对象是否有相同的数据,使用Object类中的equals方法(Object类是所有类的根类)

​ c++中,==不光进行两个数值型变量是否含有相同的数据,也会判断两个对象是否有相同的数据。

4.5 重载操作符

c++中,可以重新定义+、*、=及大多数其他操作符,以便使他们在特定的类中达到不同的效果。

java中没有重载操作符,但是可以使用命名的方法,比如add()或者其他名字

4.6 基本数据类型

boolean,byte,char,short,int,long,float,double

4.6.1 真/假

c/c++:用整数来表示真假(非0为真,0为假)

java:使用独立的类型boolean来表示真假(true,false)

4.6.2 数据类型的字节

c/c++:int型的大小可能不同,取决于运行的计算机环境

java中,一个int型的变量永远是32位(4字节),与不同操作系统对应不同的jvm造成的java跨平台有关

Java没有Sizeof()。在C\C++中,sizeof()操作符可以告诉我们为数据项分配的字节数,因为C++中不同的数据类型在不同的机器上可能有不同的大小。但是Java中所有数据类型在所有机器中大小都是相同的。(例如,C++的int在16位机器上为16位,在32及以上为32位,long在32位及以下为32位,在64位上为64位)

4.6.3 转换

java:相较于c/c++,java属于强类型语言。在其他语言中可以由系统自动进行的替换,在java中需要显式的替换,否则会出现ClassCastException(类型不匹配)

c++:支持强制自动转型

4.7 输入/输出

【并非只有列举的,只是常用的输入/输出方法】

c:输出:printf() 输入:scanf()

c++:输出count() 输入:cin()

4.8 作用域(c、c++、java的作用域由花括号的位置决定)

{

int x=12;

​ {

​ int x=96;

​ }

}

以上代码在c/c++中是合法的(c/c++会将较大作用域的变量隐藏起来),但在java中编译器会报告该变量已定义(java不会隐藏)

4.9 基本成员的默认值

当变量作为类的成员时,java才确保给定默认值,以确保那些基本类型的成员变量得到初始化,但是c++没有此功能。而对于局部变量未初始化,c++编译器会对其予以警告,java则会视为错误(没有使用不会报错;不初始化但要使用,会报错)。

4.10 移位操作符

java中新增了一种“无符号”右移位操作(>>>),它使用“零扩展”,无论正负,都在高位插入0.这是c/c++没有的。

4.10 类型转换

java允许我们把任何基本数据类型转换为其他基本数据类型(布尔不参与)

4.11 goto

c++中goto起跳转作用

java中有goto(保留字),但是不起作用。java是采用做标记来实现跳转的

比如:

ok:

for(int i=0;i<50;i++){

​ for(int j=0;j<20;j++){

​ //break;

​ //continue;

​ //continue ok;

​ if(j=5) break ok;

​ }

}

4.12 Java没有Struct或者Union
4.13 java的泛型不允许使用基本数据类型
4.14 数组

在c++中,数组定义时,已经分配存储空间,并可以使用。 (定义时指定数组大小)

在java中,数组定义时,int arr[],只字义了数组变量,数组是不可以使用的。 只有数组new以后,才会创建数组,分配存储空间,并可以使用。 (定义时指定数组大小是非法的,创建时指定数组大小)

参考资料:

https://blog.csdn.net/qq_26079093/article/details/94477842?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158755771919724845045336%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=158755771919724845045336&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1

推荐查看:https://blog.csdn.net/u012485480/article/details/79592072

大部分来自于《Java数据结构和算法》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值