scala编程之List和Set

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyzx_in_csdn/article/details/82944483
package com.lyzx.day20181005

/**
  * Scala 集合分为可变的和不可变的集合
  * 默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set包.
  * 默认引用 scala.collection.immutable._,不可变集合实例如下
  */
class DataStructure {
  /**
    * 列表的定义
    *   可以使用 item :: 列表即t2  Nil表示一个空列表即List() == Nil
    *    可以使用 列表 :+ item 在列表后面添加一个元素
    * 通过 indices 可以获取列表的下标Range 再通过for循环遍历数组
    */
  def list_f1(): Unit ={
    val t1:List[Int] = List(1,2,3)
//    val t2:List[String] = "C" :: ("A" :: ("B" :: Nil))
    val t2 = List("A","B","C") +: "D"

    for(item <- t2){
      print(item+" , ")
    }
    println()
    for(i <- t1.indices){
      println(i+"    "+t1(i))
    }

    /**
      * List.head  返回List的第一个元素
      * List.tail  返回除了第一个元素的List集合
      */
    println("t2.head="+t2.head)
    println("t2.tail="+t2.tail)
    println("t2.isEmpty="+t2.isEmpty)
  }

  /**
    * 列表的连接
    * 1、通过 :: 向List的头部添加一个元素
    * 2、
    *   2.1、通过 :::添加   t1 ::: t2                表示把t2的元素放在了t1的后面
    *   2.2、通过 .:::      t1.:::(t2)               表示把t2的元素放在了t1的前面
    *   2.3、List.concat()  List.concat(t1,t2)       表示把t2的元素放在了t1的后面
    */
  def list_f2(): Unit ={
    val t1 = "B" :: ("A" :: Nil)
    val t2 = List("C","D")

    val t2_1 = t1 ::: t2
    val t2_2 = t1.:::(t2)
    val t2_3 = List.concat(t1,t2)

    print(" ::: ")
    for(item <- t2_1){
      print(item+",")
    }
    println()

    print(" .:::() ")
    for(item <- t2_2){
      print(item+",")
    }
    println()

    print("List.concat() ")
    for(item <- t2_3){
      print(item+",")
    }
  }


  /**
    * fill函数 表示填充N次元素
    * List.fill(2)("A")  表示返回一个列表,其中有2个字符串元素 "A"
    */
  def list_f3(): Unit ={
    val t1 = List.fill(2)("A")
    for(item <- t1){
      print(item+"   ")
    }
    println()
    val t2 = (t1 ::: ("X" :: Nil)).reverse
    for(item <- t2){
      print(item+"   ")
    }
  }

  /**
    * set的基本操作
    */
  def set_f4(): Unit ={
    val set = Set(100,1,2,3,3,4)
    println("1:"+set.getClass.getName)
    println("2:"+set.exists( _ >= 4))
    println("3:"+set.drop(1))
    println("4:"+set.dropRight(1))
    println("5:"+set.dropWhile(_ > 3)) //???

    for(item <- set){
        print(item+"  ")
    }
    println()
    println("6:"+set.head)
    println("7:"+set.tail)
    println("8:"+set.isEmpty)
  }

  /**
    * set的连接
    */
  def set_f5(): Unit ={
    val s1 = Set(1,2,3,4)
    val s2 = Set(2,3,4,5)
    val s3 = s1 ++ s2
    println("s3 = "+s3)
    val s4 = s1.++(s2)
    println("s4= "+s4)

    println("min="+s3.min+"    max="+s3.max)
    println("交集:"+s1.intersect(s2))
    println("s1.diff(s2):"+s1.diff(s2))
    println("s2.diff(s1):"+s2.diff(s1))
  }
}

object DataStructure{

  def main(args: Array[String]): Unit = {
    val t = new DataStructure
    t.set_f5()
  }
}

附上完整版的List数据结构API

序号 方法及描述
1

def +:(elem: A): List[A]

为列表预添加元素

scala> val x = List(1)
x: List[Int] = List(1)

scala> val y = 2 +: x
y: List[Int] = List(2, 1)

scala> println(x)
List(1)
2

def ::(x: A): List[A]

在列表开头添加元素

3

def :::(prefix: List[A]): List[A]

在列表开头添加指定列表的元素

4

def :+(elem: A): List[A]

复制添加元素后列表。

scala> val a = List(1)
a: List[Int] = List(1)

scala> val b = a :+ 2
b: List[Int] = List(1, 2)

scala> println(a)
List(1)
5

def addString(b: StringBuilder): StringBuilder

将列表的所有元素添加到 StringBuilder

6

def addString(b: StringBuilder, sep: String): StringBuilder

扫描二维码关注公众号,回复: 3439762 查看本文章

将列表的所有元素添加到 StringBuilder,并指定分隔符

7

def apply(n: Int): A

通过列表索引获取元素

8

def contains(elem: Any): Boolean

检测列表中是否包含指定的元素

9

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

将列表的元素复制到数组中。

10

def distinct: List[A]

去除列表的重复元素,并返回新列表

11

def drop(n: Int): List[A]

丢弃前n个元素,并返回新列表

12

def dropRight(n: Int): List[A]

丢弃最后n个元素,并返回新列表

13

def dropWhile(p: (A) => Boolean): List[A]

从左向右丢弃元素,直到条件p不成立

14

def endsWith[B](that: Seq[B]): Boolean

检测列表是否以指定序列结尾

15

def equals(that: Any): Boolean

判断是否相等

16

def exists(p: (A) => Boolean): Boolean

判断列表中指定条件的元素是否存在。

判断l是否存在某个元素:

scala> l.exists(s => s == "Hah")
res7: Boolean = true
17

def filter(p: (A) => Boolean): List[A]

输出符号指定条件的所有元素。

过滤出长度为3的元素:

scala> l.filter(s => s.length == 3)
res8: List[String] = List(Hah, WOW)
18

def forall(p: (A) => Boolean): Boolean

检测所有元素。

例如:判断所有元素是否以"H"开头:

scala> l.forall(s => s.startsWith("H")) res10: Boolean = false
19

def foreach(f: (A) => Unit): Unit

将函数应用到列表的所有元素

20

def head: A

获取列表的第一个元素

21

def indexOf(elem: A, from: Int): Int

从指定位置 from 开始查找元素第一次出现的位置

22

def init: List[A]

返回所有元素,除了最后一个

23

def intersect(that: Seq[A]): List[A]

计算多个集合的交集

24

def isEmpty: Boolean

检测列表是否为空

25

def iterator: Iterator[A]

创建一个新的迭代器来迭代元素

26

def last: A

返回最后一个元素

27

def lastIndexOf(elem: A, end: Int): Int

在指定的位置 end 开始查找元素最后出现的位置

28

def length: Int

返回列表长度

29

def map[B](f: (A) => B): List[B]

通过给定的方法将所有元素重新计算

30

def max: A

查找最大元素

31

def min: A

查找最小元素

32

def mkString: String

列表所有元素作为字符串显示

33

def mkString(sep: String): String

使用分隔符将列表所有元素作为字符串显示

34

def reverse: List[A]

列表反转

35

def sorted[B >: A]: List[A]

列表排序

36

def startsWith[B](that: Seq[B], offset: Int): Boolean

检测列表在指定位置是否包含指定序列

37

def sum: A

计算集合元素之和

38

def tail: List[A]

返回所有元素,除了第一个

39

def take(n: Int): List[A]

提取列表的前n个元素

40

def takeRight(n: Int): List[A]

提取列表的后n个元素

41

def toArray: Array[A]

列表转换为数组

42

def toBuffer[B >: A]: Buffer[B]

返回缓冲区,包含了列表的所有元素

43

def toMap[T, U]: Map[T, U]

List 转换为 Map

44

def toSeq: Seq[A]

List 转换为 Seq

45

def toSet[B >: A]: Set[B]

List 转换为 Set

46

def toString(): String

列表转换为字符串

附上完整版的Set数据结构的API

序号 方法及描述
1

def +(elem: A): Set[A]

为集合添加新元素,x并创建一个新的集合,除非元素已存在

2

def -(elem: A): Set[A]

移除集合中的元素,并创建一个新的集合

3

def contains(elem: A): Boolean

如果元素在集合中存在,返回 true,否则返回 false。

4

def &(that: Set[A]): Set[A]

返回两个集合的交集

5

def &~(that: Set[A]): Set[A]

返回两个集合的差集

6

def +(elem1: A, elem2: A, elems: A*): Set[A]

通过添加传入指定集合的元素创建一个新的不可变集合

7

def ++(elems: A): Set[A]

合并两个集合

8

def -(elem1: A, elem2: A, elems: A*): Set[A]

通过移除传入指定集合的元素创建一个新的不可变集合

9

def addString(b: StringBuilder): StringBuilder

将不可变集合的所有元素添加到字符串缓冲区

10

def addString(b: StringBuilder, sep: String): StringBuilder

将不可变集合的所有元素添加到字符串缓冲区,并使用指定的分隔符

11

def apply(elem: A)

检测集合中是否包含指定元素

12

def count(p: (A) => Boolean): Int

计算满足指定条件的集合元素个数

13

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

复制不可变集合元素到数组

14

def diff(that: Set[A]): Set[A]

比较两个集合的差集

15

def drop(n: Int): Set[A]]

返回丢弃前n个元素新集合

16

def dropRight(n: Int): Set[A]

返回丢弃最后n个元素新集合

17

def dropWhile(p: (A) => Boolean): Set[A]

从左向右丢弃元素,直到条件p不成立

18

def equals(that: Any): Boolean

equals 方法可用于任意序列。用于比较系列是否相等。

19

def exists(p: (A) => Boolean): Boolean

判断不可变集合中指定条件的元素是否存在。

20

def filter(p: (A) => Boolean): Set[A]

输出符合指定条件的所有不可变集合元素。

21

def find(p: (A) => Boolean): Option[A]

查找不可变集合中满足指定条件的第一个元素

22

def forall(p: (A) => Boolean): Boolean

查找不可变集合中满足指定条件的所有元素

23

def foreach(f: (A) => Unit): Unit

将函数应用到不可变集合的所有元素

24

def head: A

获取不可变集合的第一个元素

25

def init: Set[A]

返回所有元素,除了最后一个

26

def intersect(that: Set[A]): Set[A]

计算两个集合的交集

27

def isEmpty: Boolean

判断集合是否为空

28

def iterator: Iterator[A]

创建一个新的迭代器来迭代元素

29

def last: A

返回最后一个元素

30

def map[B](f: (A) => B): immutable.Set[B]

通过给定的方法将所有元素重新计算

31

def max: A

查找最大元素

32

def min: A

查找最小元素

33

def mkString: String

集合所有元素作为字符串显示

34

def mkString(sep: String): String

使用分隔符将集合所有元素作为字符串显示

35

def product: A

返回不可变集合中数字元素的积。

36

def size: Int

返回不可变集合元素的数量

37

def splitAt(n: Int): (Set[A], Set[A])

把不可变集合拆分为两个容器,第一个由前 n 个元素组成,第二个由剩下的元素组成

38

def subsetOf(that: Set[A]): Boolean

如果集合中含有子集返回 true,否则返回false

39

def sum: A

返回不可变集合中所有数字元素之和

40

def tail: Set[A]

返回一个不可变集合中除了第一元素之外的其他元素

41

def take(n: Int): Set[A]

返回前 n 个元素

42

def takeRight(n: Int):Set[A]

返回后 n 个元素

43

def toArray: Array[A]

将集合转换为数组

44

def toBuffer[B >: A]: Buffer[B]

返回缓冲区,包含了不可变集合的所有元素

45

def toList: List[A]

返回 List,包含了不可变集合的所有元素

46

def toMap[T, U]: Map[T, U]

返回 Map,包含了不可变集合的所有元素

47

def toSeq: Seq[A]

返回 Seq,包含了不可变集合的所有元素

48

def toString(): String

返回一个字符串,以对象来表示

猜你喜欢

转载自blog.csdn.net/lyzx_in_csdn/article/details/82944483