Scala
-
1、什么是scala
scala具有面向对象编程和函数编程的一种语言,具有多种编程风格。
-
2、为什么要学习scala
1、优雅 2、速度快 3、能融合hadoop生态圈
2、scala环境安装
- 1、进入到官网(www.scala-lang-org)下载指定的安装包
- window安装
- linux安装
3、scala开发工具安装
- 在IDEA中安装插件
- 离线安装
- 插件地址: https://plugins.jetbrains.com/plugin/1347-scala
- scala-intellij-bin-2017.2.2.zip
- 在线安装
- 离线安装
一 scala window 版安装;
配置 scala home 和path
cmd 命令窗口 :scala 查看版本是否成功 。
windows 版scala 安装成功后,然后idea 开发工具也需要安装 scala 插件
直接在setting —> plugins 搜scala 在线安装即可。
下面 创建一个scala 语言的hello word
1.创建scala项目 new project —>scala---->idea —
2.创建一个包 new scala class 出现以下页面
我们选择 object 只有在object 中写主方法 才能运行 其中有俩种方式定义主方法:
1.new object
def main 回车 println("hello word)即可。
2.new object
extends App 直接println(“hello word”);
scala 学前前言:
scala 中没有静态方法和静态字段。所以在scala 中 用 object 来实现这些功能,直接用对象名.方法名即可。
val 和var的区别 ?
val 修饰的变量 不可改变 var 修饰的变量可以改变。因为 在scala中对于每一个字段都提供了getter 和setter 方法。但是针对 val 修饰的 只提供了 getter方法,所以被val 修饰的变量 的值不可改变 相当于全局。
下面是自己写的 基础scala 练习 ===================
// //1.生命变量俩种 val不可变 变量 var 可变变量
// val i=1
// var s=“hello”
// var str:String =“itcast”
// print(i+s+str)
// //2.if else 操作语法
// val x=1
// val y=if (x>0)1 else -1
// println(y)
// val z=if(x>0)1 else “error”
// println(z)
// var m=if(x>2)1
// println(m)
// val n=if(x>2)1 else ()
// println(n)
// //3.if else if 语法 注意x=-1报错
// val x=1
// val k=if(x<0)0 else if(x>2)2 else -1
// println(k)
//4.块表达式 注意最后要把变量名写一遍 即使写多个也只能打印最后一个
// val a = 10
// val b = 20
// val c = {
// val d = a + b
// val e = a - b
// d
// e
// }
// println©
// val a = 10
// val b = 20
// val m={
// val c=b-a
// val d=b-c
// d //块中最后一个表达式的值
// }
// //result 的值就是块表达式的结果
// println(m)
//5.for 和while循环
// for (i <- 1 to (10)) {
// println(i)
// }
// //{}和to() 可以省略
// for (j <- 11 to 20)
// println(j)
// //遍历数组 疑问:数组中可以存不同数据类型吗
// val array = Array(“a”, 1, “b”)
// for (a <- array)
// println(a)
//高级for循环
// for (aa <- 1 to 9; bb <- 1 to 9 if aa >= bb) {
// // println(10 * aa + bb + “”)
// println(aa + “" + bb + “=” + aa * bb)
// }
//下面模拟九九
// for (cc <- 1 to 9) {
// for (dd <- 1 to 9 if cc >= dd) {
// print(cc + "” + dd + “=” + cc * dd+"\t")
// }
// println()
// }
//6.定义方法和函数
// def m1(f:(Int,Int)=>Int):Int={
// f(2,6)
// }
// val f1=(x:Int,y:Int)=>x+y
// val f2=(m:Int,n:Int)=>m*n
//
//
// val r1=m1(f1)
// val r2=m1(f2)
// println(r1)
// println(r2)
//7.yield 构建一个集合
// val c = for (i <- 1 to 10) yield i * 10
// println©
//8.定义定长数组长度
// val a=new ArrayInt
// println(a.toBuffer)
// a(0)=1
// a(1)=2
// a(2)=3
// println(a.toBuffer)
//
// val a2=Array(“hadoop”,“scala”,“spark”)
// println(a2.toBuffer)
// println(a2(2))
//9.定义变长数组 需要导入:import scala.collection.mutable.ArrayBuffer
// val a3 = new ArrayBufferInt
// println(a3.toBuffer)
// println(a3)
// a3 += 1;
// a3 += (2, 3, 4,5)
// a3++=Array(6,7)
// a3++=ArrayBuffer(8,9)
// println(a3)
// println(a3.toBuffer)
// a3.insert(0,-1,0)
// println(a3)
// a3.insert(0,11,22,33)
// println(a3)
// a3.remove(3)
// println(a3)
//10
// .1.增强 for 循环
// 2.until 和reverse 和yield和filter和map
// val a4 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
// for (i <- a4)
// println(i)
//
// for (j <- (0 until a4.length).reverse)
// println(j)
//
// val m=for(n<-a4 if n%20)yield n*10
// println(m.toBuffer)
//
// val mm=a4.filter(_%20).map(_*100)
// println(mm.toBuffer)
//
// val b1=a4.max
// val b2=a4.min
// val b3=a4.sum
// val b4=a4.sorted
// println(“b1=”+b1)
// println(“b2=”+b2)
// println(“b3=”+b3)
// println(“b4=”+b4.toBuffer)
/* 11.映射:在scala 把哈希表这种数据结构叫做映射 就是map
a.retain((k,v)=> k==“k1”)//只保留等于k1元素,其他的删除
a += (“k3”->3)//添加元素
a += (“k4”->4)//添加元素
a += (“k1”->100)//已经存在添加元素会覆盖
a += (“k1”->100,“k9”->9)//添加多个元素
a -= (“k2”,“k1”)//删除元素
a ++= List(“CA” -> 23, “CO” -> 25)//追加集合
a.remove(“k2”)//remove
a.put(“put1”,200)//put
a.clear()//清空
*/
// var map = Map(“张三” -> 4, “李四” -> 5, “王五” -> 6);
// println(map)
// println(map.toBuffer)
// map+=(“赵六”->7)
// println(map)
//
// var a:scala.collection.mutable.Map[String,Int]=scala.collection.mutable.Map(“k1”->1,“k2”->2)
// println(a)
// val b:Int=1
// println(b.getClass)//获得变量的数据类型
// println(b.getClass.toString)//获得变量的数据类型
// a.clear();
// println(a)
/* 知识点:
any 在scala中any 是所有类的超类
* any 有俩个子类 anyval 和anyref
* anyval:是值不是对象,
*
* isInstanceOf和asInstanceOf 由scala.Any类定义,Scala类层级的根类;其中class scala.AnyRef 继承自Any,
是所有应引用类型的基类;trait scala.AnyVal 也继承自Any,是所有基本类型的实现的trait。
所以所有对象都自动拥有isInstanceOf和asInstanceOf这两个方法。
isInstanceOf(T) 判断对象是否为T类型的实例
asInstanceOf(T) 将对象类型强制转换成T类型
*
*
*
*
*
*
*
*
* */
//12.元组:自理解 :就是普通的变量类似数组 ,但里面可以存储不同数据类型的数据
// val tuple = (“hadoop”, 3.14, 200, “zk”, 500)
// val one = tuple._1
// val two: Double = tuple._2
// val three:Int=tuple._3
// println(one)
// println(two)
// println(three)
//13.将对偶的集合 转换成映射 tomap
// val arr=Array((“1”,1),(“2”,2))
// println(arr.toBuffer)
// println(arr.toMap)
//14.zip 拉链操作 可以将对应的值 进行绑定
//注意:如果两个数组的元素个数不一致,拉链操作后生成的数组的长度为较小的那个数组的
// 元素个数
// val scores=Array(12,13,14)
// val name=Array(“zhang”,“li”,“wang”)
// println(name.zip(scores).toBuffer)
//15scala 的集合有三大类,序列Seq、set、map 集合有可变和不可变俩种 immutable(不可变)
//不可变的序列 import scala.collection.immutable._
//如:不可变list +: 在列表的头部添加一个元素 ::也是在列表的头部添加一个元素 :+ 在列表的尾部添加一个元素
//++ 从列表的尾部添加另一个列表 :::在列表的头部添加一个列表
// val left=List(1,2,3)
// val right=List(4,5,6)
// println((left++right).toBuffer)
// println((left:::right).toBuffer)
// // println((right:::left))
// // println(left::right)
// println(left+:right)
// println(left:+right)
// println(0+:left)
// println(left:+0)
// //以:分界 +与单个元素 在一边 否则报错
//
//
// val other_lst=2::Nil
// println(other_lst)
//
//
// val list=List(1,2,3)
// //获得list的第一个元素
// println(list.head)
// //获得list的除第一个元素的所有元素
// println(list.tail)
//16.可变的list
val listBuffer = new ListBuffer[String]
var listBuffer1 = ListBufferInt
//注意在append()方法时 直接在println中没法输出
println(listBuffer1:+0)
println(4+:listBuffer1)
println(listBuffer+=“sds”)
listBuffer1.append(5)
println(listBuffer1)
var list2=ListBufferInt
list2.append(3,4,5)
println(list2)
list2.max
list2.min
//17.不可变set
val set=Set(1,2,3,4)
val set1=Set(3,4,5,6)
println(set.size)
println(set.min)
println(set.max)
println(set+8)
// set &~ set1 返回第一个不同于第二个 set 的元素集合
//set&set两个集合的交集
//set++set 俩个集合的并集
//set–set 在第一个set的基础上去掉第二个set中的元素
//set.diff(set) 返回第一个不同于第二个的元素集合
val a=(-1)
println(a)
============================练习结束