国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Scala之集合(1)

這篇具有很好參考價(jià)值的文章主要介紹了Scala之集合(1)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Scala之集合(1)

目錄

???????集合介紹:

不可變集合繼承圖:?編輯

?可變集合繼承圖

數(shù)組:

不可變數(shù)組:

樣例代碼:

遍歷集合的方法:

1.for循環(huán)

2.迭代器

3.轉(zhuǎn)換成List列表:

4.使用foreach()函數(shù):

可變數(shù)組:

ArrayBuffer:

二維數(shù)組:

?List集合:

Set 集合:

不可變 Set:

可變Set:

Map集合:

創(chuàng)建map:

map集合的遍歷:

可變map:

元組:

tuple的定義:

元組與map的關(guān)系:

特點(diǎn):

集合介紹:

1) Scala 的集合有三大類:序列 Seq 、集 Set 、映射 Map ,所有的集合都擴(kuò)展自 Iterable ?
特質(zhì)
2 )對(duì)于幾乎所有的集合類, Scala 都同時(shí)提供了 可變 不可變 的版本,分別位于以下兩
個(gè)包
不可變集合: scala.collection. immutable
可變集合: scala.collection. mutable
3 Scala 不可變集合,就是指該集合對(duì)象不可修改,每次修改就會(huì)返回一個(gè)新對(duì)象,而
不會(huì)對(duì)原對(duì)象進(jìn)行修改。類似于 java 中的 String 對(duì)象
4 )可變集合,就是這個(gè)集合可以直接對(duì)原對(duì)象進(jìn)行修改,而不會(huì)返回新的對(duì)象。類似
java StringBuilder 對(duì)象

不可變集合:

不可變集合繼承圖:

set集合特點(diǎn):無(wú)序,不重復(fù)

對(duì)set集合無(wú)序的理解:set集合的無(wú)序是指在使用append等方法給集合添加元素的時(shí)候所添加的元素的順序是不可預(yù)測(cè)的,并且不能按照添加順序進(jìn)行遍歷(存儲(chǔ)位置是不一定的)

Set集合的無(wú)序性是由它的實(shí)現(xiàn)方式所決定的。通常,Set集合的實(shí)現(xiàn)方式采用了哈希表這種數(shù)據(jù)結(jié)構(gòu),其中元素被散列到桶中,不同的元素可能被散列到同一個(gè)桶中,因此添加的順序不能保證元素的順序。

set集合提供了SortedSet集合是有序的(放入2,3,1,4會(huì)按照1,2,3,4進(jìn)行存儲(chǔ))SortedSet寫了一個(gè)TreeSet集合是樹(shù)狀存儲(chǔ)

Seq Java 沒(méi)有的,我們發(fā)現(xiàn) List 歸屬到 Seq 了,因此這里的 List 就和 Java 不是同一個(gè)
概念了
我們前面的 for 循環(huán)有一個(gè) 1 to 3 ,就是 IndexedSeq 下的 Range
我們發(fā)現(xiàn)經(jīng)典的數(shù)據(jù)結(jié)構(gòu)比如 Queue(隊(duì)列)? Stack (棧) 被歸屬到 LinearSeq( 線性序列 )
IndexedSeq LinearSeq 的區(qū)別:
1 IndexedSeq 是通過(guò)索引來(lái)查找和定位(相當(dāng)于數(shù)組,通過(guò)下標(biāo)查找),因此速度快,比如 String 就是一個(gè)索引集
合,通過(guò)索引即可定位
2 LinearSeq 是線型的,即有頭尾的概念,這種數(shù)據(jù)結(jié)構(gòu)一般是通過(guò)遍歷來(lái)查找

?可變集合繼承圖

Scala之集合(1)

數(shù)組:

不可變數(shù)組:

不可變集合是長(zhǎng)度不可變

Scala中的array 是與 Java中的[]對(duì)應(yīng)

樣例代碼:

package chapter05
object Test01_Array {
  def main(args: Array[String]): Unit = {
    val array = new Array[Int](4)
    array(3)=100
    //遍歷
    for (elem <- array) {
      println(elem)
    }
  }
}

在Scala中沒(méi)有寫方法名的都是調(diào)用了apply方法

遍歷集合的方法:

1.for循環(huán)

? ? ? ? 上邊樣例代碼已經(jīng)使用

2.迭代器

? ? ? ? 迭代器相當(dāng)于是指針的跳轉(zhuǎn)(指針在內(nèi)存中的跳轉(zhuǎn))

樣例代碼:

package chapter05
object Test01_Array {
  def main(args: Array[String]): Unit = {
    val array = new Array[Int](4)
    array(3)=100
val iterator: Iterator[Int] = array.iterator
    while (iterator.hasNext)
      {
        val i: Int = iterator.next()
        println(i)
      }
  }
}

3.轉(zhuǎn)換成List列表:

? ? ? ? array集合可以通過(guò)to方法轉(zhuǎn)換成List列表

4.使用foreach()函數(shù):

在Scala中給所有的集合都提供了一個(gè)foreach()方法 進(jìn)行函數(shù)式打印

foreach()源碼:

def foreach[U](f: A => U): Unit = {
    var i = 0
    val len = length
    while (i < len) { f(this(i)); i += 1 }
  }

源碼分析:

foreach()傳入的參數(shù)實(shí)際是傳入的函數(shù)

A:是代表你傳入集合的類型

U:是泛型,代表你的輸出類型

這個(gè)函數(shù)的返回值是Unit類型

讓后通過(guò)while進(jìn)行向下運(yùn)行

對(duì)foreach()函數(shù)的調(diào)用使用匿名函數(shù)進(jìn)行調(diào)用

  array.foreach(i=>println(i*2))

可變數(shù)組:

數(shù)組是默認(rèn)的不可變的,如果需要可變是需要自己導(dǎo)包的

ArrayBuffer:

填入的初始化大小(數(shù)組的大?。?只決定了創(chuàng)建底層結(jié)構(gòu)的長(zhǎng)度(不填的話默認(rèn)是16)

ArrayBuffer是可以進(jìn)行添加元素的append()

可以進(jìn)行增刪改查

可變數(shù)組與不可變數(shù)組元素的增加區(qū)別:

可變的用方法不可變的用符號(hào)

代碼樣例:

可變數(shù)組的增刪改查:

package chapter05
import scala.collection.mutable.ArrayBuffer
object Test_02_ArrayBuffer {
  def main(args: Array[String]): Unit = {
    //可變---導(dǎo)包
    val arrayBuffer = new ArrayBuffer[Int](4)
    arrayBuffer.append(1,2,3)
    arrayBuffer.remove(1)
    arrayBuffer.update(0,100)
    println(arrayBuffer(0))
    println(arrayBuffer)
  }
}

不可變數(shù)組是不可變的,如果使用符號(hào)做出改變會(huì)生成一個(gè)新的對(duì)象

val array = new Array[Int](10)
    val array1: Array[Int]= array :+ 8
    println(array1.toList)

使用to方法可以讓可變與不可變數(shù)組進(jìn)行相互轉(zhuǎn)換

二維數(shù)組:

二維數(shù)組的定義與遍歷:

   val array2: Array[ Array[Int]] = Array(Array(1, 2, 3),Array(1, 2, 3),Array(1, 2, 3))
    for (array3 <- array2) {
      for (elem <- array3) {
        print(elem+ "\t")
      }
      println()
    }

在Scala中創(chuàng)建多維數(shù)組的方法:

    val array3: Array[Array[Int]] = Array.ofDim[Int](3, 4)

?List集合:

List是一個(gè)抽象類 在不繼承的情況下是無(wú)法new的,所以需要使用伴生對(duì)象的apply方法

直接使用即可

1 List 默認(rèn)為不可變集合
2 )創(chuàng)建一個(gè) List (數(shù)據(jù)有順序,可重復(fù))
    val list = List(1, 2, 3, 4)
3 )遍歷 List
list.foreach(println)
4 List 增加數(shù)據(jù)
由繼承圖可知 List集合為鏈表下邊的類? 鏈表添加數(shù)據(jù)有頭插法和尾插法之分?
????????(不可變集合用符號(hào))?
尾插:
 val ints: List[Int] = list :+ 10
 ints.foreach(println)
頭插:
    val list1: List[Int] = 10 :: list
    list1.foreach(println)
5 )集合間合并:將一個(gè)整體拆成一個(gè)一個(gè)的個(gè)體,稱為扁平化
扁平化是把兩個(gè)集合的數(shù)據(jù)進(jìn)行打散,然后進(jìn)行連接合并
  val list2 = List(5, 6, 7, 8)
    val ints1: List[Int] = list ::: list2
    println(ints1)
? ? ? ? Scala之集合(1)? ? ? ? ? ? ? ? ? ? ? ? ? ?
6 )取指定數(shù)據(jù)
    println(ints1(5))
7 )空集合 Nil
? ? ? Nil是一個(gè)空集合,相當(dāng)于創(chuàng)建一個(gè)空的List,他是一個(gè)單獨(dú)的對(duì)象
val ints2: List[Int] = 1 :: 2 :: 4 :: 5 :: Nil
val ints3: List[Int] = 3 :: 6 :: 7 :: 9 :: List()

上述兩行代碼代表的是一個(gè)意思

ListBuffer:
ListBuffer是一個(gè)可變的集合
可變集合是可變的,調(diào)用使用函數(shù),需要導(dǎo)包

Set 集合:

????????默認(rèn)情況下,Scala 使用的是不可變集合,如果你想使用可變集合,需要引用
scala.collection.mutable.Set
set集合其實(shí)是一個(gè)特質(zhì),需要直接調(diào)用apply方法創(chuàng)建對(duì)象(省略函數(shù)名)

不可變 Set:

?
1 Set 默認(rèn)是不可變集合,數(shù)據(jù)無(wú)序
2 )數(shù)據(jù)不可重復(fù)(set集合的使用場(chǎng)景---->去重)
 val value: Any = Set(1, 1, 2,2,3, 4, 5, 6, 7, 8, 9)
    println(value)

運(yùn)行結(jié)果:
Scala之集合(1)

判斷set的類型:

 val bool: Boolean = value.isInstanceOf[HashSet[Int]]
    println(bool)
set集合默認(rèn)時(shí)使用HashSet集合的,只有在數(shù)據(jù)元素的個(gè)數(shù)小于等于4個(gè)的時(shí)候才會(huì)使用特殊的set集合

可變Set:

在寫可變set的時(shí)候,添加mutable.set
創(chuàng)建語(yǔ)句:
    val ints: mutable.Set[Int] = mutable.Set(1, 2, 2, 3, 1, 4, 5, 6, 8, 7, 9)

可變Set的增加是add方法,不是append方法

可變Set的集合也是符合不可重復(fù),不可修改的特點(diǎn)

?只可增刪查

Map集合:

map集合也是一個(gè)特質(zhì),可以通過(guò)apply方法創(chuàng)建對(duì)象

map是一個(gè)(k,v)集合

創(chuàng)建map:

(1)這是一種采用元組的方式創(chuàng)建的

    val map = Map(("hello", 10), ("world", 20))

(2)這是采用的箭頭的方式創(chuàng)建的

    val map1 = Map("hello" -> 10, "world" -> 12)

常用第一種方式創(chuàng)建

map集合的遍歷:

(采用第一種方式創(chuàng)建的)

for循環(huán)得到的對(duì)象是元組

    for (elem <- map) {
      //elem是元組
      val key: String = elem._1
      val value: Int = elem._2
      println(s"${key}:${value}")
    }

在Scala中value的類型為Int類型? 在Java中是Int的包裝類(防止在get方法找value不存在的時(shí)候?yàn)镹ull的情況)

上述情況也會(huì)在Scala中出現(xiàn),Scala是對(duì)get方法使用Option(是一個(gè)抽象類,被兩個(gè)子類實(shí)現(xiàn)(None,Some))封裝

如果get的key存在 就調(diào)用上述的some類 再對(duì)結(jié)果進(jìn)行調(diào)用get? 轉(zhuǎn)換成int類型 (方法很長(zhǎng),而且在沒(méi)有值的情況下是會(huì)報(bào)錯(cuò)的)

因?yàn)樘L(zhǎng)引入了新的寫法:

對(duì)map集合直接調(diào)用getOrElse(1)方法? ?設(shè)置1? 有值輸出值? 無(wú)值輸出1

    val i: Int = map.getOrElse("hello", 1)
    println(i)

不存在就會(huì)返回None

可變map:

可變map也是采用mutable.map進(jìn)行創(chuàng)建

增刪改查:

增加:

put方法? 這個(gè)方法可以增加也可以進(jìn)行修改? ?當(dāng)key值存在的時(shí)候? 如果value不同會(huì)覆蓋前值

  val maybeInt: Option[Int] = map.put("helloi2", 23)

刪除:

    val maybeInt1: Option[Int] = map.remove("hello")

查找:

查找與不可變一樣使用getOrElse方法進(jìn)行查找

元組:

本身為不可變 ,可以存放不同數(shù)據(jù)類型的元素

list具有上述的性質(zhì)? ? 但是使用list存放不同類型的數(shù)據(jù) 在調(diào)用的時(shí)候無(wú)法得到相應(yīng)的類型(統(tǒng)一為Any)而tuple(元組可以)

tuple的定義:

    val tuple: (String, Int) = ("hihihi", 23)

元組與map的關(guān)系:

map中的(key? value )元素被默認(rèn)當(dāng)作二元組

特點(diǎn):

這樣我們可以實(shí)現(xiàn)list集合與map集合的轉(zhuǎn)換

    val toList: List[(String, Int)] = map1.toList
    println(toList)

?運(yùn)行結(jié)果:

?

Scala之集合(1)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-417792.html

到了這里,關(guān)于Scala之集合(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用Guava輕松創(chuàng)建和管理不可變集合

    使用Guava輕松創(chuàng)建和管理不可變集合

    第1章:引言 大家好,我是小黑。今天,我們來(lái)聊聊一個(gè)在Java編程里超有用的話題:使用Guava創(chuàng)建和管理不可變集合。首先,咱們得明白,什么是不可變集合。簡(jiǎn)單來(lái)說(shuō),不可變集合就是一旦創(chuàng)建就不能被修改的集合。 為啥要用不可變集合呢?想象一下,你寫了一段代碼,把

    2024年02月04日
    瀏覽(19)
  • 不可變集合、Lambda表達(dá)式、Stream流

    不可變集合、Lambda表達(dá)式、Stream流

    不能被修改的集合 應(yīng)用場(chǎng)景 如果某個(gè)數(shù)據(jù)不能被修改,把它防御性的拷貝到不可變集合中是個(gè)很好的實(shí)踐。 當(dāng)集合對(duì)象被不可信的庫(kù)調(diào)用時(shí),不可變形式是安全的。 創(chuàng)建不可變集合 在List、Set、Map接口中,都存在靜態(tài)的of方法,可以獲取一個(gè)不可變的集合。 方法名稱 說(shuō)明

    2024年02月10日
    瀏覽(23)
  • 第7章 Scala集合

    第7章 Scala集合

    ? ? scala.collection.immutable ? scala.collection.mutable ? ? 不可變數(shù)組 可變數(shù)組 多維度數(shù)組 不可變列表 可變列表 不可變Set 可變Set ? 不可變Map 可變Map ? 通用屬性和操作 衍生集合 ? 簡(jiǎn)單計(jì)算函數(shù) ? 高級(jí)計(jì)算函數(shù) ?? ? 應(yīng)用案例-合并Map 隊(duì)列 ? 并行集合 ?

    2024年02月10日
    瀏覽(22)
  • 【Scala】集合

    【Scala】集合

    目錄 類型 不可變集合 可變集合 數(shù)組 不可變 可變數(shù)組 不可變數(shù)組與可變數(shù)組的轉(zhuǎn)換 多維數(shù)組 List list運(yùn)算符 可變 ListBuffer Set 集合 不可變 Set 可變 mutable.Set Map 集合 可變 Map 元組 操作 通用操作 衍生集合操作 計(jì)算函數(shù) 排序 sorted sortBy sortWith 計(jì)算高級(jí)函數(shù) 實(shí)例 WordCount 案例

    2023年04月09日
    瀏覽(21)
  • Scala集合 - List

    水善利萬(wàn)物而不爭(zhēng),處眾人之所惡,故幾于道?? 一、不可變List ? 1. 創(chuàng)建List ? 2. 取指定的數(shù)據(jù) ? 3. 向List中添加元素 ? 4. 遍歷List ? 5. 集合間合并 - 扁平化處理 二、可變List ? 1. 創(chuàng)建可變集合對(duì)象 ? 2. 添加元素 ? 3. 修改元素 ? 4. 刪除元素 1. 創(chuàng)建List ??創(chuàng)建一個(gè)L

    2024年02月15日
    瀏覽(23)
  • Scala集合 - Set

    水善利萬(wàn)物而不爭(zhēng),處眾人之所惡,故幾于道?? 一、不可變Set集合 ? 1. 創(chuàng)建集合 ? 2. 添加元素 ? 3. 刪除元素 ? 4. 遍歷集合 二、可變Set集合 ? 1. 創(chuàng)建可變集合 ? 2. 添加元素 ? 3. 刪除元素 ? 4. 遍歷集合 1. 創(chuàng)建集合 ??Set點(diǎn)進(jìn)去是個(gè)特質(zhì),沒(méi)法new,直接用伴生對(duì)象的

    2024年02月16日
    瀏覽(34)
  • Scala集合

    Scala集合

    scala中的集合分為兩種 ,可變集合和不可變集合, 不可變集合可以安全的并發(fā)的訪問(wèn)! 集合的類主要在一下兩個(gè)包中 可變集合包 scala.collection.mutable 不可變集合包 scala.collection.immutable 默認(rèn)的 Scala 不可變集合,就是指該集合對(duì)象不可修改,每次修改就會(huì)返回一個(gè)新對(duì)象,而不會(huì)對(duì)

    2024年01月20日
    瀏覽(19)
  • Scala之集合(3)

    Scala之集合(3)

    ? 目錄 ? WordCount案例: 需求分析與步驟: 拆分: 聚合: 格式轉(zhuǎn)化: 方法1: 方法2: 排序: 方法1: 方法2: 取top3: 整體化簡(jiǎn)后的代碼: WordCoount案例升級(jí): 給定數(shù)據(jù): 方法1: 方法2: 方法3: 并行集合: ? 聚合過(guò)程較為繁瑣,分為以下幾步: (1)先將切割后的List集合

    2023年04月24日
    瀏覽(19)
  • Scala之集合(2)

    Scala之集合(2)

    ? 目錄 集合基本函數(shù): (1)獲取集合長(zhǎng)度 (2)獲取集合大小 (3)循環(huán)遍歷 (4)迭代器 (5)生成字符串 (6)是否包含 衍生集合: (1)獲取集合的頭 (2)獲取集合的尾 (3)集合最后一個(gè)數(shù)據(jù) (4)集合初始數(shù)據(jù) (5)反轉(zhuǎn) (6)取前(后)n 個(gè)元素 (7)去掉前(后)

    2024年02月02日
    瀏覽(21)
  • Scala之集合(1)

    Scala之集合(1)

    目錄 ???????集合介紹: 不可變集合繼承圖:?編輯 ?可變集合繼承圖 數(shù)組: 不可變數(shù)組: 樣例代碼: 遍歷集合的方法: 1.for循環(huán) 2.迭代器 3.轉(zhuǎn)換成List列表: 4.使用foreach()函數(shù): 可變數(shù)組: ArrayBuffer: 二維數(shù)組: ?List集合: Set 集合: 不可變 Set: 可變Set: Map集合

    2023年04月18日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包