Scala-集合

来源:互联网 发布:上海linux运维培训 编辑:程序博客网 时间:2024/06/07 12:49

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.Setobject 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.Setobject 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.Setimport scala.collection.mutable.ArrayBufferobject 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("\n");    //        for(i <- prefix) print(i+"->");//    //        println("《=前缀");    //        for(i <- suffix) print(i+"->");//    //        println("<=后缀");  }}

12、列表的折叠化简操作

import scala.collection.mutable.Setimport scala.collection.mutable.ArrayBufferobject 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);  }}