一,基本概念

1,映射

Map与HashMap与TreeMap,SotredMap等区别:

1、HashMap键无序,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,在Map 中插入、删除和定位元素,HashMap 是最好的选择; 
2、LinkedHashMap 是HashMap的一个子类,键保存了插入的顺序,使用Iterator遍历时,得到的也是插入顺序的记录; 
3、TreeMap默认按键的升序排序,可以定制。 
4、HashTable 线程安全,键不能为null,与HashMap类似,但效率较低,HashMap如果需要实现同步,可以使用Collections. synchronizedMap或ConcurrentHashMap 。

课后习题4.2

/*
编写一段程序,从文件中读取单词。用一个可变映射来清点每个单词出现的频率。读取这些单词的操作可以使用java.util.Scanner: */
//method1
val in=new java.util.Scanner(new java.io.File("/home/user/people.txt"))
val map=new HashMap[String,Int]
while (in.hasNext()){
map(in.next())=map.getOrElse(i,0)+1
}
map
//method2
val file=scala.io.Source.fromFile("/home/usr/people.txt").mkString
val tokens=file.split("\\s+") //\\s表示 空格,回车,换行等空白符,+号表示一个或多个的意思,
val map=scala.collection.mutable.HashMap[String,Int]
for (word <- tokens)
map[word]=map.getOrElse(word,0)+1
map

课后习题4.7

/*按格式打印出出所有Java系统属性的表格*/
import scala.collection.JavaConversions.propertiesAsScalaMap
val props:scala.collection.Map[String,String]=System.getProperties()
val keys=props.keySet
val keyLength=for (key <- keys) yield(key.length)
val maxKeyLength=keyLength.max
for ((k,v) <- props){
print(k)
print(" "*(maxKeyLength-k.length))
print("|")
println(v)
}

二,类与对象

1,针对方法,带()多指改变了对象状态方法,而不带只是简单的读取

2,类构造方法@BeanProperty  var name:String=_:   内部类和 外部类可以调用getName()和setName()方法  加private时,只有内部类可以

  2.2 主构造函数法:class People(val name:String,private var age:Int)  name能被内部类和外部对象读取,age 能在内部类中读写,但不被外部访问

1,class Peo(private val  name:String)
val p=new Peo("z")
p.<tab>
asInstanceOf isInstanceOf toString (无name不可读和写) ,2,class Peo(val name:String)
val p=new Peo("z")
p.<tab>
asInstanceOf isInstanceOf name toString (name属性可读) 3,class Peo( var name:String)
val p=new Peo("z")
p.<tab>
asInstanceOf isInstanceOf name name_= toString (name,可读和可写) 4,class Peo( private var name:String)
val p=new Peo("z")
p.<tab>
asInstanceOf isInstanceOf toString (无name不可读和写)

2,静态方法和非静态方法区别:

  首先,两者本质上的区别是:静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。

其次,静态方法中只能调用静态成员或者方法,不能直接调用非静态方法或者非静态成员(可以声明对象来调用),而非静态方法既可以调用静态成员或者方法又可以调用其他的非静态成员或者方法。

3,多维组使用:val arr=Array.ofDim(3)   出错,必须为多维数组指定类型  val arr=Array.ofDim[String](3)    arr=Array(3)  和arr=new Array(3)有区别

4,枚举类型:在Scala中并没有枚举类型,但在标准类库中提供了Enumeration类来产出枚举。扩展Enumeration类后,调用Value方法来初始化枚举中的可能值  (黏贴用:paste, 对象时object)

object ExecutorState extends Enumeration{
type ExecutorState = Value
val LAUNCHING, LOADING, RUNNING, KILLED, FAILED, LOST, EXITED = Value
def isFinished(state:ExecutorState):Boolean = {
Seq(KILLED, FAILED, LOST, EXITED).contains(state)
}
}

5,包

package com.hostname.impatient  :子类不能引用父类的类
package com{
class T1{}
package hostname{
class T2(t1:T1){}
package impatient{
class T3(t1:T1,t2:T2){}
}
}
}

5.1  private[com] def giveRaise(rate:Double) 表示除com外其它都不可访问

5.2 scalac 编译文件生class  scala  class 将文件解析为机器可执行文件

5.3  object test extends App{ } 可以用以测试

6,继承

6.1 重写与重载()

   重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

  1,(override)重写方法不能比被重写方法限制有更严格的访问级别,即父类的访问权限(private)低于子类的访问权限(public)

  2,参数列表必须与被重写方法的相同;返回类型必须与被重写方法的返回类型相同;如果一个方法不能被继承,则不能重写它;不能重写被标识为final的方法。

  3,重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。

  4,重写抽象类的方法,就不用使用override,直接使用def ...

  

6.2 类型检查 a.asInstanceOf[Employee]

6.3 抽象类的特征

1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

2、抽象方法必须由子类来进行重写。

3、只要包含一个抽象方法的类,该类必须要定义成抽象类,不管是否还包含有其他方法。

4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

5、子类中的抽象方法不能与父类的抽象方法同名。

6、abstract不能与final并列修饰同一个类。

7、abstract 不能与private、static、final或native并列修饰同一个方法。

     8, scala中如果抽象类中的字段没被初始化,则认为是抽象字段(不用override),反之普通字段,需要。

  快学课后习题答案

Scala快学笔记(二)的更多相关文章

  1. Scala快学笔记(三)

    一 ,文件操作: 1,读取行:val source=Source.fromFile("fileName","utf-8)  形成一个字符串:source.mkString ...

  2. Scala快学笔记(一)

    一,基本概念: 1,Scala是一种基于JVM的面向对象和函数式编程语言 2,基本类型:数值类型 ->:Byte,Short,Int,Long,Float,Double和布尔类型:Boolean ...

  3. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、

    1:Scala之函数式编程学习笔记: :Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法: class User { private ...

  4. [Scala] 快学Scala A3L3

    Actor 通过尽可能避免锁和共享状态,actor使得我们能够容易地设计出正确.没有死锁或争用状况的程序. Scala类库提供了一个actor模型的简单实现.AKKA是更高级的actor类库. 19. ...

  5. [Scala] 快学Scala A2L2

    集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快 ...

  6. [Scala] 快学Scala A1L1

    基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...

  7. 快学Scala-第二章 控制结构和函数

    知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 ...

  8. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  9. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

随机推荐

  1. [Leetcode Week6]Reorder List

    Reorder List 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/reorder-list/description/ Description G ...

  2. POJ2680(动态规划,大数)

    Computer Transformation Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4548   Accepted ...

  3. 4.flume实战(一)

    需求:从指定网络端口采集数据输出到控制台 使用flume的关键就是写配置文件 a)配置source b)配置channel c)配置sink d)把以上三个组件串起来 我们看一下官网给的配置文件 # ...

  4. Centos 下,配置 Apache + Python + Django + postgresSQL 开发环境

    用 Python 搭建一个 Web 服务器 文章结构 一.安装  Apache.Python.django 二.安装 mod_wsgi,Apache 为 Python 提供的 wsgi 模块  三.将 ...

  5. [BZOJ1494][NOI2007]生成树计数 状压dp 并查集

    1494: [NOI2007]生成树计数 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 793  Solved: 451[Submit][Status][ ...

  6. (一)Centos7安装zabbix3.4 server端

    (1)环境准备 关闭firewalld和selinux systemctl stop firewalld systemctl disable firewalld #sed -ri '/^SELINUX ...

  7. (5)python 字符串和输入输出

    一.字符串转义 字符串可以包含任何字符可以用单引号也可以用双引号 a='hello' a="hello" 如果字符串中存在单引号,可以用双引号里包含单引号的方式 a="I ...

  8. CF 1009A Game Shopping 【双指针/模拟】

    Maxim wants to buy some games at the local game shop. There are n games in the shop, the i-th game c ...

  9. (转载)UIKIt力学教程

    转载自:http://www.cocoachina.com/ios/20131226/7614.html 这篇文章还可以在这里找到 英语,   Ray:这篇教程节选自 iOS 7 教程集,它是 iOS ...

  10. mysql使用default来设置字段的默认值

    mysql创建表时,我们可以使用default来设置表字段的默认值,这样当向表中插入或添加数据时,如果没有为此字段设置任何值,则使用default默认值来填充该字段的值 在使用create table ...