• scala知识点


    --------数据类型-------
    整型,浮点型,字符,字符串,布尔型,Unit无值,Null空值,
    Nothing:其他所有类型的子类型
    Any:所有其他类的超类
    AnyRef:所有引用类的基类
    --------数据结构----------
    字符串String,
    StringBuffer:可变,每次操作都是对其本身进行操作
    append方法把字符添加到缓冲区的末端
    insert方法是在指定的点添加字符

    数组Array,可变的,具有索引的集合
    但是一但大小设定,就无法再改变
    Vector:不可变的Array
    ArrayBuffer:可变类的Array

    容器:
    import scala.collection
    import scala.collection.mutable._ 可变容器
    import scala.collection.immutable._ 不可变容器
    列表List[T],不可变的链表,很适合递归操作
    ListBuffer:可变列表
    集合Set,默认是不可变的
    可变集合Set:scala.collection.mutable.Set

    映射Map
    元组Tuple(数值),这个数值是元组总包含几个元素
    元组不可变,可包含不同类型的元素
    访问:t._1表示访问第一个元素
    选项Option[T]:一个类型为T的可有值(Some)可无值(None)的一个值。

    -------- => --------
    1.传名调用:将未计算的参数表达式直接应用到函数内部
    2.case 1=>"one"

    -------- -> ----------
    1. Map("runoob" -> "www.runoob.com")

    -------- :: ----------
    1. List的一个方法,用于在头部添加新元素
    1::List(2,3)=List(2,3).::1=List(1,2,3)
    在scala里所有以:结尾的运算符是右关联的,其他的运算符都是左关联的!
    2.表示一个非空的List,常见于模式匹配
    case n::rest=>n+sum(rest)
    n::rest会匹配一个非空集合,结合的第一个元素被提取并赋值给变量n,剩余变量被提取并赋予变量rest.

    ----------打印--------
    print,println

    -----------循环----------
    for(arg<-args){}
    for(i <- 1 to 10){}
    for循环中的yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。

    ----------模式匹配--------
    1.每个备选项都开始于关键字case
    2.每个备选项都包含了一个模式及一到多个表达式。
    case 模式=>表达式

    def matchTest(x:Any):Any=x match{
    case 1=>"one"
    case "two"=>2
    case y:Int=>"scala.Int"
    case _=>"many"
    }

    ---------函数--------
    def main(args: Array[String]){} 主函数
    def func(a:Int,b:Int):Int={} 函数定义
    def func(a:Int,b:Int):Int 抽象函数
    def func(args:String*)={} 函数最后一个参数可以是可变参数
    val mul=(x:Int,y:Int)=>x+y ;println(mul(3,4)) 匿名函数,mul是一个函数

    --------字符串---------
    String:不可变,修改后会产生一个新的对象
    StringBuilder:可变 val buf=new StringBuilder;
    获得字符串长度:str.length()
    字符串连接:str1.concat(str2) 或 str1+str2
    printf()方法格式化字符串并输出:
    var fs=printf("浮点型变量为 " +
    "%f, 整型变量为 %d, 字符串为 " +
    " %s", floatVar, intVar, stringVar)
    println(fs)
    根据给定正则表达式的匹配拆分此字符串
    String[] split(String regex)
    删除指定字符串的首尾空白符
    String trim()

    -------数组---------
    第一个元素索引为0,最后一个元素索引为元素总数减1
    声明数组:var z=new Array[String](3)
    定义一个数组:var z=Array("baidu","ali")
    元素赋值:z(0)="baidu"

    多维数组:
    矩阵和表格是常见的二维数组
    定义一个二维数组:var myMatrix=ofDim[Int](3,3)

    合并数组:concat()接收多个数组参数,var list3=concat(list1,list2)
    创建区间数组:range(start,end,step),step步长,默认为1

    数组方法,需要使用import Array._ 引入包
    创建一个二数组,长度有第一个参数指定,同时每个元素使用第二个参数进行填充
    list0=fill[Int](3,4)(0:Int)

    返回指定长度数组,每个数组元素为指定函数的返回值。
    list=Array.iterate(0,3)(a=>a+1) 数组初始值为0,长度为3,计算函数是a=>a+1
    (list:Array(0,1,2))

    --------------集合-------------------
    List 列表 val x=List(1,2,3,4)
    Set 集合 val x=Set(1,3,5,7)
    Map 映射:键值对 val x=Map("one"->1,"two"->2)
    元组 :不同类型值的集合 val x=(10,"one")
    Option[T] :有可能包含值,也可能不包含值的容器 val x:Option[Int]=Some(5)

    ----------------Iterator 迭代器---------------------
    Iterator 迭代器:逐一访问容器内元素的方法
    方法:next(),hasNext,max,min,sizelength,contains(elem:Any):Boolean,
    count(p:(A)=>Boolean):Int 返回迭代器元素中满足条件p的元素总数
    exists(p:(A)=>Boolean):Boolean
    filter(p:[A]=>Boolean):Iterator[A]
    filterNot(p:[A]=>Boolean):Iterator[A]
    find(p:[A]=>Boolean):Option[A]
    ...

    val it=Iterator("baidu","ali")
    while (it.hasNext){
    println(it.next())
    }

    ------------类-------------------
    class Point(xc:Int,yc:Int){
    var x:Int=xc
    var y:Int=yc
    def move(dx:Int,dy:Int){}
    }

    继承:extends
    1.重写一个非抽象方法必须使用override修饰符
    2.只有主构造函数才可以往基类的构造函数里写参数
    3.只允许继承一个父类,会继承父类的所有属性和方法
    class Location(override val xc:Int,override val yc:Int,
    val zc:Int) extends Point(xc,yc){
    var z:Int=zc
    def move(dx:Int,dy:Int,dz:Int){} //move是不同的函数了
    }

    Trait特征(接口):关键字trait,extends
    1.可继承多个特征
    2.特征可以定义属性和方法的实现
    3.子类继承特征可以实现未被实现的方法


    ------------常用函数-----------
    isInstanceOf():判断类型

    --------------case class--------------
    case类:模式类
    让编译器帮忙自动生成常用方法!
    1.编译器会为case class自动生成以下的方法:
    equals,hashCode,toString,copy
    2.编译器会为case class自动生成伴生对象
    3.编译器会为伴生对象自动生成以下方法
    apply,unapply
    意味着不用使用new关键字就可以实例化一个case class
    4.case class的类参数在不指定val/var修饰时,会自动编译为val,即对外只读,
    如果需要case class的字段外部可写,可以显式地指定var关键字

    通常不会让一个普通类继承case class,会导致一些问题
    copy方法会基于当前实例的所有字段值赋值一个 新的实例并返回,
    可以在通过给copy方法传递参数来重新设定某一个或几个字段的值,
    这是通过命名参数实现(named parameters)实现的。

    case object 是全局的一个唯一的实例

  • 相关阅读:
    分享AWS网站
    centos7划分vlan
    在docker容器上如何实现代码的版本管理
    在docker私有仓库如何查看有哪些镜像?
    centos7下报错: import requests ImportError: No module named requests
    Unity2018.4.7导出Xcode工程报错解决方案
    1.OpenGL mac开发环境搭建记录
    unity 模板测试 详解
    游戏战争迷雾
    Unity 移动平台自己编写Shader丢失问题
  • 原文地址:https://www.cnblogs.com/xl717/p/11612332.html
Copyright © 2020-2023  润新知