modify
This commit is contained in:
		
							
								
								
									
										13
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								README.md
									
									
									
									
									
								
							| @@ -142,8 +142,11 @@ TODO | |||||||
|  |  | ||||||
| 1. [Scala简介及开发环境配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala简介及开发环境配置.md) | 1. [Scala简介及开发环境配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala简介及开发环境配置.md) | ||||||
| 2. [基本数据类型和运算符](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala基本数据类型和运算符.md) | 2. [基本数据类型和运算符](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala基本数据类型和运算符.md) | ||||||
| 3. [数组](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala数组相关操作.md) | 3. [流程控制语句](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala流程控制语句.md) | ||||||
| 4. [集合](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala集合.md) | 4. [数组Array](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala数组.md) | ||||||
| 5. [集合使用(1)——列表](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala列表.md) | 5. [集合综述](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala集合.md) | ||||||
| 6. [集合使用(2)——映射和元组](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala映射和元组.md) | 6. [常用集合类型之——List](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala列表.md) | ||||||
| 7. [流程控制语句](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala流程控制语句.md) | 7. [常用集合类型之——Map & Tuple](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala映射和元组.md) | ||||||
|  | 8. 其他常用集合类型 | ||||||
|  | 9. 类和对象 | ||||||
|  | 10. 函数和闭包 | ||||||
| @@ -8,10 +8,9 @@ | |||||||
| <a href="#五列表的基本操作">五、列表的基本操作</a><br/> | <a href="#五列表的基本操作">五、列表的基本操作</a><br/> | ||||||
| <a href="#六列表的高级操作">六、列表的高级操作</a><br/> | <a href="#六列表的高级操作">六、列表的高级操作</a><br/> | ||||||
| <a href="#七List对象的方法">七、List对象的方法</a><br/> | <a href="#七List对象的方法">七、List对象的方法</a><br/> | ||||||
| <a href="#八处理多个列表">八、处理多个列表</a><br/> | <a href="#八处理多个List">八、处理多个List</a><br/> | ||||||
| </nav> | </nav> | ||||||
|  |  | ||||||
|  |  | ||||||
| ## 一、List字面量 | ## 一、List字面量 | ||||||
|  |  | ||||||
| List是Scala中非常重要的一个数据结构,其与Array(数组)非常类似,但是List是不可变的,和Java中的List一样,其底层实现是链表。 | List是Scala中非常重要的一个数据结构,其与Array(数组)非常类似,但是List是不可变的,和Java中的List一样,其底层实现是链表。 | ||||||
| @@ -413,7 +412,7 @@ res41: List[Nothing] = List() | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## 八、处理多个列表 | ## 八、处理多个List | ||||||
|  |  | ||||||
| 当多个List被放入同一个tuple中时候,可以通过zipped对多个List进行关联处理。 | 当多个List被放入同一个tuple中时候,可以通过zipped对多个List进行关联处理。 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,7 +11,10 @@ | |||||||
| 
 | 
 | ||||||
| ## 一、定长数组 | ## 一、定长数组 | ||||||
| 
 | 
 | ||||||
| 在Scala中,如果你需要一个长度不变的数组,可以用Array。 | 在Scala中,如果你需要一个长度不变的数组,可以使用Array。同时需要注意以下两点: | ||||||
|  | 
 | ||||||
|  | - 在scala中使用`(index)`而不是`[index]`来访问数组中的元素,因为访问元素,对于Scala来说是方法调用,`(index)`相当于执行了`.apply(index)`方法。 | ||||||
|  | - scala中的数组与Java中的是等价的,`Array[Int]()`在虚拟机层面就等价于Java的`int[]`。 | ||||||
| 
 | 
 | ||||||
| ```scala | ```scala | ||||||
| // 10个整数的数组,所有元素初始化为0 | // 10个整数的数组,所有元素初始化为0 | ||||||
| @@ -31,16 +34,9 @@ scala> a(0) | |||||||
| res3: String = hello | res3: String = hello | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 这里需要注意以下两点: |  | ||||||
| 
 |  | ||||||
| + 在scala中使用`(index)`而不是`[index]`来访问数组中的元素,因为访问元素,对于Scala来说是方法调用,`(index)`相当于执行了`.apply(index)`方法。 |  | ||||||
| + scala中的数组与Java中的是等价的,`Array[Int]()`在虚拟机层面就等价于Java的`int[]`。 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## 二、变长数组 | ## 二、变长数组 | ||||||
| 
 | 
 | ||||||
| 在scala中,通过ArrayBuffer实现变长数组(又称缓冲数组),相当于Java中的ArrayList。变长数组的构建方式及常用操作如下: | 在scala中通过ArrayBuffer实现变长数组(又称缓冲数组)。在构建ArrayBuffer时必须给出类型参数,但不必指定长度,因为ArrayBuffer会在需要的时候自动扩容和缩容。变长数组的构建方式及常用操作如下: | ||||||
| 
 | 
 | ||||||
| ```java | ```java | ||||||
| import scala.collection.mutable.ArrayBuffer | import scala.collection.mutable.ArrayBuffer | ||||||
| @@ -75,7 +71,7 @@ object ScalaApp { | |||||||
| } | } | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 这里需要说明的是:由于scala的变长数组是使用java的集合来实现的,而Java集合的底层实现是链表,这意味使用`+= `在末尾插入元素是一个高效的操作,因为其时间复杂度是O(1)。而使用insert随机插入元素的时间复杂度是O(n),因为在其插入位置之后的所有元素都要进行对应地后移,所以在`ArrayBuffer`中随机插入元素是一个低效的操作。 | 这里需要说明的是:使用`+= `在末尾插入元素是一个高效的操作,其时间复杂度是O(1)。而使用insert随机插入元素的时间复杂度是O(n),因为在其插入位置之后的所有元素都要进行对应地后移,所以在`ArrayBuffer`中随机插入元素是一个低效的操作。 | ||||||
| 
 | 
 | ||||||
| ## 三、数组遍历 | ## 三、数组遍历 | ||||||
| 
 | 
 | ||||||
| @@ -138,7 +134,7 @@ object ScalaApp extends App { | |||||||
| 
 | 
 | ||||||
| ## 五、多维数组 | ## 五、多维数组 | ||||||
| 
 | 
 | ||||||
| 和Java中一样,多维数组由单位数组组成。 | 和Java中一样,多维数组由单维数组组成。 | ||||||
| 
 | 
 | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -1,36 +1,38 @@ | |||||||
| # Scala映射和元组 | # Map & Tuple | ||||||
|  |  | ||||||
| <nav> | <nav> | ||||||
| <a href="#一映射Map">一、映射(Map)</a><br/> | <a href="#一映射Map">一、映射(Map)</a><br/> | ||||||
|         <a href="#11-构造映射">1.1 构造映射</a><br/> |         <a href="#11-构造Map">1.1 构造Map</a><br/> | ||||||
|         <a href="#12-获取值">1.2 获取值</a><br/> |         <a href="#12-获取值">1.2 获取值</a><br/> | ||||||
|         <a href="#13-新增修改删除值">1.3 新增/修改/删除值</a><br/> |         <a href="#13-新增修改删除值">1.3 新增/修改/删除值</a><br/> | ||||||
|         <a href="#14-遍历映射">1.4 遍历映射</a><br/> |         <a href="#14-遍历Map">1.4 遍历Map</a><br/> | ||||||
|         <a href="#15-产生新映射">1.5 产生新映射</a><br/> |         <a href="#15-yield关键字">1.5 yield关键字</a><br/> | ||||||
|         <a href="#16-有序映射">1.6 有序映射</a><br/> |         <a href="#16-其他Map结构">1.6 其他Map结构</a><br/> | ||||||
|         <a href="#17-其他方法">1.7 其他方法</a><br/> |         <a href="#17-可选方法">1.7 可选方法</a><br/> | ||||||
|         <a href="#18-与Java互操作">1.8 与Java互操作</a><br/> |         <a href="#18-与Java互操作">1.8 与Java互操作</a><br/> | ||||||
| <a href="#二元组Tuple">二、元组(Tuple)</a><br/> | <a href="#二元组Tuple">二、元组(Tuple)</a><br/> | ||||||
|         <a href="#21--模式匹配">2.1  模式匹配</a><br/> |         <a href="#21--模式匹配">2.1  模式匹配</a><br/> | ||||||
|         <a href="#22-Zip方法">2.2 Zip方法</a><br/> |         <a href="#22-zip方法">2.2 zip方法</a><br/> | ||||||
| </nav> | </nav> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## 一、映射(Map) | ## 一、映射(Map) | ||||||
|  |  | ||||||
| ### 1.1 构造映射 | ### 1.1 构造Map | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| // 初始化一个空map | // 初始化一个空map | ||||||
| val scores01 = new HashMap[String, Int] | val scores01 = new HashMap[String, Int] | ||||||
|  |  | ||||||
| // 从指定的值初始化映射(方式一) | // 从指定的值初始化Map(方式一) | ||||||
| val scores02 = Map("hadoop" -> 10, "spark" -> 20, "storm" -> 30) | val scores02 = Map("hadoop" -> 10, "spark" -> 20, "storm" -> 30) | ||||||
|  |  | ||||||
| // 从指定的值初始化映射(方式二) | // 从指定的值初始化Map(方式二) | ||||||
| val scores03 = Map(("hadoop", 10), ("spark", 20), ("storm", 30)) | val scores03 = Map(("hadoop", 10), ("spark", 20), ("storm", 30)) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| 采用上面方式得到的都是不可变(immutable)映射,想要得到可变映射,则用: | 采用上面方式得到的都是不可变Map(immutable map),想要得到可变Map(mutable map),则需要使用: | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| val scores04 = scala.collection.mutable.Map("hadoop" -> 10, "spark" -> 20, "storm" -> 30) | val scores04 = scala.collection.mutable.Map("hadoop" -> 10, "spark" -> 20, "storm" -> 30) | ||||||
| @@ -53,7 +55,7 @@ object ScalaApp extends App { | |||||||
|  |  | ||||||
| ### 1.3 新增/修改/删除值 | ### 1.3 新增/修改/删除值 | ||||||
|  |  | ||||||
| 可变映射允许进行新增、修改、删除等操作。 | 可变Map允许进行新增、修改、删除等操作。 | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -82,7 +84,7 @@ object ScalaApp extends App { | |||||||
| (hive,50) | (hive,50) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| 不可变映射不允许进行新增、修改、删除等操作,但是允许由不可变映射产生新的映射。 | 不可变Map不允许进行新增、修改、删除等操作,但是允许由不可变Map产生新的Map。 | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -102,7 +104,7 @@ object ScalaApp extends App { | |||||||
| (hive,50) | (hive,50) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 1.4 遍历映射 | ### 1.4 遍历Map | ||||||
|  |  | ||||||
| ```java | ```java | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -121,9 +123,9 @@ object ScalaApp extends App { | |||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 1.5 产生新映射 | ### 1.5 yield关键字 | ||||||
|  |  | ||||||
| 可以使用`yield`关键字从现有映射产生新的映射。 | 可以使用`yield`关键字从现有Map产生新的Map。 | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -151,7 +153,7 @@ object ScalaApp extends App { | |||||||
| (30,storm) | (30,storm) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 1.6 有序映射 | ### 1.6 其他Map结构 | ||||||
|  |  | ||||||
| 在使用Map时候,如果不指定,默认使用的是HashMap,如果想要使用`TreeMap`或者`LinkedHashMap`,则需要显式的指定。 | 在使用Map时候,如果不指定,默认使用的是HashMap,如果想要使用`TreeMap`或者`LinkedHashMap`,则需要显式的指定。 | ||||||
|  |  | ||||||
| @@ -177,7 +179,7 @@ object ScalaApp extends App { | |||||||
| (C,30) | (C,30) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 1.7 其他方法 | ### 1.7 可选方法 | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -229,7 +231,7 @@ tuple: (Int, Float, String) = (1,3.24,scala) | |||||||
|  |  | ||||||
| ### 2.1  模式匹配 | ### 2.1  模式匹配 | ||||||
|  |  | ||||||
| 可以通过模式匹配来进行获取元组中的值并赋予对应的变量: | 可以通过模式匹配来获取元组中的值并赋予对应的变量: | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| scala> val (a,b,c)=tuple | scala> val (a,b,c)=tuple | ||||||
| @@ -245,7 +247,7 @@ scala> val (a,_,_)=tuple | |||||||
| a: Int = 1 | a: Int = 1 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 2.2 Zip方法 | ### 2.2 zip方法 | ||||||
|  |  | ||||||
| ```scala | ```scala | ||||||
| object ScalaApp extends App { | object ScalaApp extends App { | ||||||
| @@ -255,7 +257,7 @@ object ScalaApp extends App { | |||||||
|      |      | ||||||
|   // 1.zip方法得到的是多个tuple组成的数组 |   // 1.zip方法得到的是多个tuple组成的数组 | ||||||
|   val tuples: Array[(String, Int)] = array01.zip(array02) |   val tuples: Array[(String, Int)] = array01.zip(array02) | ||||||
|   // 2.也可以在zip后调用toMap方法转换为映射 |   // 2.也可以在zip后调用toMap方法转换为Map | ||||||
|   val map: Map[String, Int] = array01.zip(array02).toMap |   val map: Map[String, Int] = array01.zip(array02).toMap | ||||||
|      |      | ||||||
|   for (elem <- tuples) { println(elem) } |   for (elem <- tuples) { println(elem) } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user