Scala-集合

1、空集合Nil,以及右结合


object controllAbstract {

  def main(args: Array[String]): Unit = {
    //向空集合Nil中添加元素
    //双冒号是右结合
   // println((1::2::Nil));
    //List(1, 2)
    val list = List(1,2,4);
    val list1 =  8::list;//创造了一个新集合,原来的list集合元素没有变
    println(list);
    println(list1);
    //List(1, 2, 4)
//    List(8, 1, 2, 4)
  }
}

2、递归方法求list元素之和


object controllAbstract {

  def sum(list: List[Int]):Int ={
    if(list == Nil) 0 else list.head+sum(list.tail);//从头部开始一个一个元素取出来
  }

  def main(args: Array[String]): Unit = {

    val list = List(1,3,4);
    val result =  sum(list);
    println(result);

  }
}

3、模式匹配case match

object controllAbstract {

//模式匹配
  def sum(list: List[Int]):Int = list match {
    case Nil =>0
    case a::b => a + sum(b);//将list集合拆分成头部a和尾部集合b
      //其实也是相当于list.head+sum(list.tail)的递归
  }

  def main(args: Array[String]): Unit = {
    val list = List(1,3,4,5,6);
    val result =  sum(list);
    println(result);

  }
}

4、可变列表linkedlist


import scala.collection.mutable._

object controllAbstract {
  def main(args: Array[String]): Unit = {

    //可变列表linkedlist
    val list = LinkedList(12,4,4,0,-2,-9);
    var cur = list;
    while (cur!=Nil){
      if(cur.elem < 0) cur.elem =0;
      cur =  cur.next;
    }
    for(i <- list) println(i);

  }
}

import scala.collection.mutable._

object controllAbstract {
  def main(args: Array[String]): Unit = {

    //可变列表linkedlist
    val list = LinkedList(12,4,4,0,-2,-9);
    var cur = list;
    while (cur!=Nil){
      if(cur.elem < 0) cur.elem =0;
      cur =  cur.next;
      println(cur);
    }
    /*
    LinkedList(4, 4, 0, -2, -9)
LinkedList(4, 0, -2, -9)
LinkedList(0, -2, -9)
LinkedList(-2, -9)
LinkedList(-9)
LinkedList()
     */
//    for(i <- list) println(i);

  }
}

5、添加元素操作符

    object controllAbstract {
      def main(args: Array[String]): Unit = {

        val list = List(1,3,4);
        val list2 =  list:+2;//左结合,加在list集合后面
        val list3 =  3::list;//右结合,加在list前面
        for(j<- list) print(j);
        println("===");
        for(i<- list2) print(i);
        println("====");
        for(k<- list3) print(k);
        /*134===
        1342====
        3134
    */

  }
}

6、set集合

    object controllAbstract {
      def main(args: Array[String]): Unit = {

      val set = Set(1,2,3);
        val set1 = set + (12);
         for(i <- set1)  print(i+",");
        println("========");
        for(i <- set) print(i+",");
  }
}

7、集合相加

    object controllAbstract {
      def main(args: Array[String]): Unit = {

    val list = List(1,3,4);
        val list1 = List(1,2,4);
        val list2 = list ++ list1;//任意两个集合相加
        for(i <- list2) print(i);
  }
}

8、++: –》任意两个集合 右结合

    object controllAbstract {
      def main(args: Array[String]): Unit = {

        val list = List(1,4);
        val list1  = List(2,3);
        val list2 = list ++:list1;//表示在list1前面加list
        val list3 = list1 ++: list;//等价于:::
        val list4 = list1 ++ list;//等价于::
        for(i<- list2) print(i);
        println("==");
        for(i<- list3) print(i);
        println("==");
        for(i<-list4) print(i);
        /*
        1423==
        2314==
        2314
         */

  }
}

9、set集合的交集,并集,差异集合

    object controllAbstract {
      def main(args: Array[String]): Unit = {

      val set = Set(1,3,5);
        val set1 = Set(1,2,5);
        val set2 = set | set1;//并集
        for(i <- set2) print(i+"-");
        println("==");
        val set3 = set & set1;//交集
        for(i<- set3) print(i+"-");
        println("==");
        val set4 = set &~ set1;//两个集合的差异元素
        println("==");
        for(i<-set4)print(i+"-");
/*
1-3-5-2-==
Disconnected from the target VM, address: '127.0.0.1:58811', transport: 'socket'
1-5-==
==
3-
 */

  }
}

10、+= /++=/-=/–=操作的是可变集合

import scala.collection.mutable.Set

object controllAbstract {
      def main(args: Array[String]): Unit = {

        val set = Set(1,2,4);//这里的set是可变的集合
        set +=11;
        for(i<-set) print(i+"->");
  }
}
import scala.collection.mutable.Set

object controllAbstract {
      def main(args: Array[String]): Unit = {

        val set = Set(1,2,4,5,6,7,8);//这里的set是可变的集合
        val set1 = Set(5,6);
        set +=11;//+=用来操纵元素 ++=用来操作集合
        set -= 1;
        set --= set1;//--=也用来操作集合
        for(i<-set) print(i+"->");
        //2->7->4->11->8->
  }
}

11、take,drop,splitAt,ZIP

import scala.collection.mutable.Set
import scala.collection.mutable.ArrayBuffer

object controllAbstract {
  def main(args: Array[String]): Unit = {

    //拉链操作
    val arr = Array(5, 6, 6, 7, 1, 2, 4);
    val arr1 = ArrayBuffer(23, 4, 5, 6);
    val arr5 = ArrayBuffer("hello","world","nihao");
    val arr2 = arr.zip(arr1);
    for(i<-arr2) print(i+"->");//(5,23)->(6,4)->(6,5)->(7,6)->
    println();
    val arr3 = arr.zipAll(arr1,-1,-2);//表示的意思是如果arr1不够就用-2,arr不够就用-1
    for(i<-arr3)print(i+"<-");//(5,23)<-(6,4)<-(6,5)<-(7,6)<-(1,-2)<-(2,-2)<-(4,-2)<-
    val arr4 = arr.zipWithIndex;//和自己的索引形成元组(5,0)->(6,1)->(6,2)->(7,3)->(1,4)->(2,5)->(4,6)->
    println();
    for(i<-arr4)print(i+"->");
    val arr6 =  arr5.map(_.toUpperCase());//利用高阶函数map将数组的每个元素都转换为大写ELLO<-WORLD<-NIHAO<-
    println();
    for(i<-arr6)print(i+"<-");
    //********************************************
    //       val arr1 =  arr.init;//去掉了最后一个元素
    //       val arr1 =  arr.take(2);//获取前两个元素
    //        val arr1 = arr.drop(2);//删除前两个元素
    //        val (prefix,suffix) = arr.splitAt(3);//在第三个元素的后面进行切割
    //        for(i<-arr) print(i+"->");
    //        println("
");

    //        for(i <- prefix) print(i+"->");//
    //        println("《=前缀");
    //        for(i <- suffix) print(i+"->");//
    //        println("<=后缀");

  }
}

12、列表的折叠化简操作

import scala.collection.mutable.Set
import scala.collection.mutable.ArrayBuffer

object controllAbstract {
  def main(args: Array[String]): Unit = {

    val list = List(2,5,6);
    //列表的折叠操作
    val result =  list.foldRight(1)(_ - _);//将初始值放在右边
    //2 -(5 -(6 -1))=2
    println(result);
    val result1 = list.foldLeft(1)(_ - _);//将初始值放在左边
    //((1 -2) -5) -6=-12
    println(result1);



  }
}
欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
原文地址:https://www.cnblogs.com/flyingcr/p/10327094.html