1. 程式人生 > >Scala之Array,List,Tuple,Set,Map

Scala之Array,List,Tuple,Set,Map

package com.scala.study

/**
  * Created by Administrator on 2016/8/8.
  */
object Test {


  def max(x:Int,y:Int):Int={
          if(x>y) x
          else y
  }

  /**
    * 函式只有一條語句時,可以不用花括號{ }
    * @param x
* @param y
* @return
*/
def max2(x:Int,y:Int)=if(x>y) x else y


  def arrayTest(): Unit ={
      val 
numbers = Array("one","two","three"); for (i<- 0 to 2){ System.out.println(numbers(i)) } } /** * 不同與Java的List,Scala的List一旦建立就不可改變 */ def listTest(): Unit ={ val oneTwo=List(1,2) val threeFour = List(3,4) val oneTwoThreeFour=oneTwo :::threeFour println
(""+oneTwo+" and " + threeFour +" were not mutated.") println("Thus,"+oneTwoThreeFour+" is a new List.") } /** * ::把新元素組合到現有列表的最前端,然後作為執行結果返回新的列表 */ def listTest2(): Unit ={ val towThree = List(2,3) val oneTwoThree=1 :: towThree//::是towThree的運算元 println(oneTwoThree)// List(1,2,3)
} /** * Nil相當與空的List * 可以使用::操作符把所有元素串起來。然後以Nil結尾,來定義一個新的列表 */ def listTest3(): Unit ={ val oneTwoThree=1 :: 2 :: 3 :: Nil println(oneTwoThree) } /** * 瞭解List一些方法的用法 */ def listTest4(): Unit ={ val list=List("Tracy","WestBrook","Drunt","James","Kobe") println(list(2))//返回在list列表上索引為2的元素Drunt println(list.count(s => s.length==4))//技術長度為4的String元素個數,1個 println(list.drop(2))//返回去掉前2個元素的list列表 list("Drunt","James","Kobe") println(list.dropRight(2))//返回去掉後兩個元素的list列表 list("Tracy","WestBrook","Drunt") println(list.exists(s => s=="Harden"))//判斷是否有值為Harden的元素 false println(list.filter(s => s.length==4))//返回長度為4的元素依次組成新列表 list("Kobe") println(list.forall(s => s.endsWith("s")))//判斷列表所有的元素是否都以s結尾的 false println(list.foreach(println))//對list列表中的每個字串執行print語句 println(list.head)//返回List列表的第一個元素,Tracy println(list.init)//返回list列表除去最後一個元素的其他元素所組成的列表 list(Tracy,WestBrook.Drunt,James) println(list.dropRight(1))//以上一個方法的結果相同 println(list.isEmpty)//判斷列表是否為空 false println(list.last)//返回list列表的最後一個元素 Kobe println(list.length)//返回列表的元素數量 5 println(list.map(s => s+"y"))//返回由List列表裡每一個String元素都加了y list("Tracyy","WestBrooky","Drunty","Jamesy","Kobey") println(list.mkString(","))//返回由列表元素組成的字串,用,分割 Tracy,WestBrook,Drunt,James,Kobe println(list.reverse)//返回逆序排成的新列表 list("Kobe","James","Drunt","WestBrook","Tracy") } /** * 元組也是不可變,但可以包含不同型別的元素 * 元組的型別取決於它包含的元素數量和元素型別 * 這也是為什麼元組不能像List那樣list(i)來獲取元素了, * List的apply方法始終返回同一個型別,但是Tuple的型別不盡相同 * 用點,下劃線,基於1的索引獲取元素 */ def tupleTest: Unit ={ val pair =(99,"Luftballons") println(pair._1) println(pair._2) } /** * (1)Set通過類繼承的差別,把可變性差異蘊含其中 * (2)Set提供了兩個子特質(特質類似Java的Interface),分為可變和不可變 * */ def setTest(): Unit ={ val jetSet=Set("Boeing","Airbus")//預設建立不可變的 val jetSetNew=jetSet+"Lear"//建立並返回包含了新元素的新Set println(jetSetNew.contains("Lear")) } /** * 可變的set需要匯入import scala.collection.mutable.Set */ def mutableSetTest(): Unit ={ import scala.collection.mutable.Set var movieSet=Set("Hitch","Poltergeist") movieSet +="Shrek"//可變集把元素加入自身 println(movieSet) } /** * 可變的Map */ def mutableMap(): Unit ={ import scala.collection.mutable.Map var treasureMap = Map[Int,String]() treasureMap += (1 -> "Go to island.") treasureMap += (2 -> "Find big X on ground.") treasureMap += (3 -> "Dig.") println(treasureMap(2))//Find big X on ground } /** * 對於不可變的map,不需要引入相關的Map,因為預設就是不可變的 */ def immutableMap(): Unit ={ val romanNumeral=Map( 1 ->"I",2 ->"II",3 ->"III",4 ->"IV",5 ->"V" ) println(romanNumeral(4))//IV } def main(args: Array[String]): Unit = { immutableMap } }