java数据结构学习总结--1 - pony1223

时间:2024-03-07 19:54:18

java数据结构学习总结--1

第一章知识总结:

一、概述

1.数据结构:即数据在计算机中的储存结构,即如何来储存这些数据。最常见的储存方式如采用:数组,链表,栈,堆,树,图等。

2.算法:即对这些结构中的数据进行各种处理;即如何来处理这些数据。

3.数据结构和算法能够用来解决什么问题呢?可以用来对现实世界数据进行储存,程序员的工具,用于建模。

所谓的现实世界的数据:即那些描述于计算机外部的物理实体数据。

程序员的工具:即并不是所有的储存结构都用来储存现实世界的数据,如栈,队列等结构可以当做工具来简化一些操作。

建模:即现实世界的情况构造模型,最常用的就是图,图可以用来表示城市之间的航线,电路中的连接等任务之间的安排关系。

二、算法概述:

1.对于大多数的数据结构来说,都需要掌握对数据的CRD操作;另外就是重点掌握排序;然后就是递归操作。这些都是算法的核心。

2.一些常用到的定义:

1)数据库:数据储存的库,数据库中的每一条数据都被认为是同样的格式;此外文件术语也代表同样的意思。

2)记录:数据库中的每一条数据或则一个单元就是记录,为储存信息提供了一个结构格式。

3)字段:一条记录经常被划分为几个字段,一个字段中保存某一种特定的数据。

java语言中,类对应于表,一个类的实例化对象对应找一个记录,而对象中定义的各个成员变量对应于字段。

4)关键字:在数据库中查找一条记录,需要指定记录的某一个字段为关键字,通过这个特定的关键字来查找。

三、面向过程编程与面向对象编程

1.面向对象的编程的产生,是因为面向过程的编程存在两个问题:

1)程序与现实世界缺乏对应关系,意思是指在面向过程的编程中数据和方法是分开储存的,两则没有什么必然的关联关系,很难去模拟现实世界的数据,如人,人可以有吃饭,跑步等行为,另外还有身高,体重等属性,采用面向过程的编程很难将其抽象到一起来,而唯一的概念就是储存在程序员脑海中,但是当有多个这样的对象的时候,那么程序员就会产生混乱。

2)程序内部结构出现的问题:即在面向过程的编程中,是将程序划分为一个一个的方法,即注重的是方法,而没有重视数据,没法做到使数据对存取它的方法可用,而对其它方法而隐藏,数据呈现的状态要么是全局的变量,要么是局部变量。

正因为上面的问题,而产生了面向对象的编程:

1)对象:对象中包含了数据和方法,即实现了整合,更好的去实现了和现实世界数据的对应关系。

2)类:类是对象的模板,因为同一个类型的对象是可以有多个的,所以对象是类的实例。

3)创建对象:java中创建一个对象,必须使用关键字new,在创建对象的同时,需要将一个引用储存到一个具有合适的类型的变量中。另外,创建对象也称作为实例化对象,因此常把对象叫做类的实例。

4)访问对象的方法:在java中通过点(.)运算符可以访问对象中的某个方法和成员变量。

四、面向对象的程序:

package cn.mdj.data.number_one;

public class Demo01 {

 

public static void main(String[] args) {

        //开辟账户 

BankAccount ba1 = new BankAccount(100.0);

        System.out.println("before transaction:");

        System.out.println(ba1.display());

        //存款

        ba1.deposit(75.55);

        //取款

        ba1.withdraw(21.2);

        System.out.println("after transaction");

        System.out.println(ba1.display());

}

 

}

 

class BankAccount {

private double account;

 

//构造方法,开辟一个新的账户

public BankAccount(double account){

this.account = account;

}

 

//存款

public void deposit(double amount){

this.account += amount;

}

 

//取存

public void withdraw(double amount){

this.account -= amount;

}

 

//查看账户

public double display(){

return this.account;

}

 

//set get 方法

public double getAccount() {

return account;

}

 

public void setAccount(double account) {

this.account = account;

}

    

}

总结:

一个类中的数据字段(成员变量)经常被设置为私有的,而方法经常是公有的,这样可以保护数据,防止被其它类中的方法所修改。所有外界的实体要想访问一个类中的数据,必须使用哪个类自己的方法。这便是面向对象编程的重要特性之一:封装的特性。

 

五、继承和多态

在面向对象的编程中,还有两个重要的特征即:继承和多态。

继承:继承是指由基类扩展或派生形成一个新类,在这个扩展的新类中拥有基类的所有成员。在java语言中,继承又称为子类化,基类被称为父类,扩展类被称为子类。

继承的最大好处在于提高代码的重用性。

多态:比如java中的重载和覆写都是多态的体现,在如对象的多态向上转型和向下转型都体现了多态。即同一方法处理不同的对象,或则说同一方法被不同的对象调用,不同类的对象执行不同的方法都体现了多态。多态的好处在于体现了代码的灵活性。

 

六、C++java的不同之处:

1.JavaC++的最大不同之处在于:java中没有指针。而本质上是在java中只是显示的摆脱了指针,但实质是指针仍旧以储存地址的形式埋藏在程序的深处。

1)引用:在java中虽然没有指针但是有引用,引用中储存的是一个对象的地址,而对象真正储存在内存空间中的某个地方,引用并不是对象本身。要注意在java中对基本数据类型和对象的处理是不同的。

2)赋值:如:bc1 为某个对象的引用,bc2=bc1; 那么在C++中,即代表将一个名为bc1的对象的所有数据拷贝到了另一个名为bc2的对象中。这样在程序中就存在了两个含有相同数据的对象。然而在java中,这条赋值语句只是代表向bc2中拷贝了bc1指向的储存地址,即现在bc1bc2实际上指向的是同一个对象,它们都这个对象的引用,在程序中只有一个对象存在。

3)new操作符:java中任何对象的创建都必须要使用到new关键字,但new关键字在java中返回的是一个引用,而不像C++中返回的是一个指针。

new关键字申请空间以后如何去释放不再使用的空间,在C++中采用delete。在java中,则因为垃圾回收机制的存在,会自动每隔一段时间就会去查看是否存在垃圾,然后自动回收。

4)参数:在C++中指针经常被用来进行对象之间的传递,从而避免拷贝一个大的对象的系统开销。在java中,对象经常以引用的形式传递。

然而,基本数据类型总是通过它的值来传递的。即由方法创建一个新的变量,并将参数的值复制到这个新的变量中去。

5)相等的判断:对于基本数据类型,javaC++是一样的,可以通过相等操作符(==)来判断两个变量是否包含有相同的值。

但对于引用数据类型则不同了,在C++中可以通过==操作符来判断对象的内容是否相同;但是在java==操作符判断的这个对象的引用是否相同,即判断的是它们是否指向的是同一对象,而并不是对象的内容。在java中要判断两个对象中是否包含有相同的数据,则要使用equals方法来进行判断。

 

2.重载操作符

1)在java中没有重载操作符,即没有像C++中那样可以重新定义+*等操作符的功能。

 

3.基本数据类型

java中基本数据类型包括:数值型和字符型以及布尔型即:

byte short int long float double char boolean  

依次的默认值为:

0   0   0  0 0.0 0.0 \'\u0000\' false

 

C++的主要不同之处有:

1)在C++中的布尔型,可以采用非0即真来取决true false;但是在java中布尔型的值只能是true 和 false 两种没有什么非零即真的说法。

2)在CC++ int 型大小可能不同,取决于它们的运行的计算机环境;在java中,一个int型变量的字节永远是4个字节即32位。

 

4.输入和输出的不同:

C++ 中采用的是 cout cin来进行输入和输出;而在java中的输出采用的是:

输出:

可以通过下面的语句来输出任何的基本数据类型,以及String类:

System.out.println();

System.out.println();

print() 方法是将光标停在同一行;而println()方法是将光标移至到下一行开始。

输入:

Java中的输入比较麻烦:

输入字符串:通常有两种方法:一种是利用Scanner类,另外就是利用BufferedReader类。

Scanner类比较常用,也比较简单如下面:

package cn.mdj.data.number_one;

 

import java.util.Scanner;

 

public class Demo02 {

 

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

String s = scanner.next(); //返回一个字符串

int i = scanner.nextInt(); //返回一个整型

double d = scanner.nextDouble();//返回一个double

System.out.println(d);

System.out.println(i);

System.out.println(s);

}

}

 

对于BufferedReader类读取输入,即缓存读入也需要知道:

package cn.mdj.data.number_one;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class Demo02 {

public static void main(String[] args) {

try {

System.out.println(Demo02.getString());

System.out.println(Demo02.getChar());

System.out.println(Demo02.getInt());

System.out.println(Demo02.getDouble());

} catch (IOException e) {

e.printStackTrace();

}

}

 

//读取字符串的方法

public static String getString() throws IOException{

System.out.println("请输入:");

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String s = br.readLine(); //读取一行数据

return s;

}

 

//读取字符的方法:

public static char getChar() throws IOException{

String s = Demo02.getString();

return s.charAt(0);

}

 

//输入整数

public static int getInt() throws IOException{

String s = Demo02.getString();

int i = Integer.parseInt(s);

return i;

}

 

//输入浮点型

public static double getDouble() throws IOException{

String s = Demo02.getString();

double d = Double.parseDouble(s);

return d;

}

}