• 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;

    }

    }

  • 相关阅读:
    大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端
    大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF
    大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优
    大数据学习----day27----hive02------1. 分桶表以及分桶抽样查询 2. 导出数据 3.Hive数据类型 4 逐行运算查询基本语法(group by用法,原理补充) 5.case when(练习题,多表关联)6 排序
    大数据学习day26----hive01----1hive的简介 2 hive的安装(hive的两种连接方式,后台启动,标准输出,错误输出)3. 数据库的基本操作 4. 建表(内部表和外部表的创建以及应用场景,数据导入,学生、分数sql练习)5.分区表 6加载数据的方式
    大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户
    大数据学习day24-------spark07-----1. sortBy是Transformation算子,为什么会触发Action 2. SparkSQL 3. DataFrame的创建 4. DSL风格API语法 5 两种风格(SQL、DSL)计算workcount案例
    大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算
    大数据学习day22------spark05------1. 学科最受欢迎老师解法补充 2. 自定义排序 3. spark任务执行过程 4. SparkTask的分类 5. Task的序列化 6. Task的多线程问题
    [POJ] 1325 Machine Schedule(最小点覆盖)
  • 原文地址:https://www.cnblogs.com/pony1223/p/2486506.html
Copyright © 2020-2023  润新知