scala数据结构(一)
时间:2020-07-02
本文章向大家介绍scala数据结构(一),主要包括scala数据结构(一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、概述
1,特点
1)Scala同时支持不可变集合和可变集合 2)两个主要的包: 不可变集合:scala.collection.immutable 可变集合: scala.collection.mutable 3)Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本 4)Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型。
2,不可变集合继承一览图
3,可变集合继承一览图
二、数组
1,可变和不可变:
Array ===> ArrayBuffer
2,定义不可变数据数组方式
//定义数组:方式一 val arr = new Array[Int](10) //定义数组:方式二 val arr = Array(1,2,"scala") //调用apply方法 arr(1)=8 //赋值,索引1的值为8 //添加,生成一个新的数组 arr.+:(4) //删除,删除值为1的元素(并且只刪除第一个) val array: Array[Any] = arr.drop(1) //改,修改索引1的值为6 arr.update(1,6) arr(1)=8
3,定义变长数组
//定义变长数组 val ints = new ArrayBuffer[Int]() val ints = ArrayBuffer[Int](1, 5, 9) //添加,同一个数组 ints.append(10) //删除,删除索引为2之后的2个元素 ints.remove(2,2) //改,同定长数组 ints(1)=20 ints.update(1,20)
4,定长数组与变长数组转换
1)arr1.toBuffer //定长数组转可变数组 2)arr2.toArray //可变数组转定长数组
5,多维数组
//定义 arr 是一个二维数组:有三个元素[一维数组],每个一维数组存放4个值 val arr = Array.ofDim[Double](3,4) //赋值 arr(1)(1) = 11.11
6,Scala数组与Java的List互转
// Scala集合转成Java集合 val arr = ArrayBuffer("1", "2", "3") import scala.collection.JavaConverters._ //隐式转换 val javaList: util.List[String] = arr.asJava println(javaList) //[1, 2, 3]
//java的List转成scala的ArrayBuffer val arrList = new util.ArrayList[String]() arrList.add("test") //隐式转换 import scala.collection.JavaConversions.asScalaBuffer import scala.collection.mutable val scalaArr: mutable.Buffer[String] = arrList
三、元组
1,简介
元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据。
说的简单点,就是将多个无关的数据封装为一个整体,称为元组, 最大的特点灵活,对数据没有过多的约束。 //需求-> 高效率
2,创建
//1. tuple 的类型是 Tuple3 //2. 根据元素个数不同,对应的类型是 Tuple1----Tuple22 //3. Tuple是一个整体,使用迭代器进行遍历 //4. 访问Tuple的元素的方式是 tuple._1 .... tuple._3 //5. 元组是scala推荐使用,在java没有 val tuple = (1, 2, "scala")
四、集合
1,定义:
Scala的List可以直接存放数据,就是一个object,默认情况下Scala的List是不可变的,List属于序列Seq。
不可变、可变: List ===> ListBuffer
2,创建:
val ints:List[Int] = List(1,2,3) //创建
List默认采用不可变方式在immutable包下不用引包,List中可以放任何类型数据List[Any],空集合可以直接使用Nil对象
3,List常用操作
val ints = List(1,2,4,5) //添加 val ints1 = ints :+ 20 //ints集合后面追加 val ints2 = 10 +: ints //ints集合前面添加 val ints3 = 1 :: ints //将1作为元素往ints中添加 val ints3 = ints1 :: ints //将ints1中的元素与ints中元素合并为一个集合,:::两边都是集合 //修改,会生成一个新的集合 val intsUpdate = ints .updated(1,15) //删除,截取原集合指定索引以及后面的所有元素生成一个新的集合 val intsDrop = ints.drop(2) //List(4, 5)
4,ListBuffer常用操作
val buffer = ListBuffer(6,7,8) //添加 buffer.append(10) //修改 buffer.update(1,1) //删除 buffer.remove(3) println(buffer.mkString(",")) //6,1,10
五、Map
1,定义
Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。
不可变、可变: scala.collection.immutable.Map ===> scala.collection.mutable.Map
2,不可变immutable.Map
//创建 //方式一:底层为元组Tuple2类型,输出顺序与声明顺序一致 val map1 = Map("A" -> 10, "B" -> 20, "C" -> 30) //方式二:对偶元组 val map2 = Map( ("A", 1), ("B", 2), ("C", 3),("D", 30) )
3,可变mutable.Map
//创建: 输出顺序与声明顺序不一致 val map1 = scala.collection.mutable.Map("A" -> 10, "B" -> 20, "C" -> 30) //添加 //添加并创建一个新的map val map2 = map1 + ("FFF"->10) //添加,追加到原有mao中 map1 += ("FFF"->10) //删除指定key map1 -= ("B","C") //修改指定key的值,如果没有改key就为添加 map1.update("A",888)
4,Map取值
//key不存在抛异常NoSuchElementException map(key) //map.get(key)得到Option对象,要么是Some要么是None map.get(key).get //key存在返回值,不存在返回默认值 map.getOrElse(key,default)
六、Set
1,可变不可变
immutable.Set ===> mutable.Set
2,可变set集合操作
//创建可变set集合 val mutableSet = mutable.Set(1,2,3) //添加元素的两种方式 mutableSet.add(6) mutableSet += 7 //删除元素的两种方式 mutableSet -= 2 mutableSet.remove(10)
原文地址:https://www.cnblogs.com/bbgs-xc/p/13222040.html
- 仿qq登录界面
- 搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境
- WindowsMobile/Win Form-界面自适应
- 搜索附近人和商铺功能
- 通过Mono 在 Heroku 上运行 .NET 应用
- 百度地图聚合
- LVS DR模式 RealServer 为 Windows 2008 R2配置
- android画图之贝塞尔曲线讲解
- 地图开发添加标注物
- lambda表达式-编译测试
- MongoDB 聚合管道(Aggregation Pipeline)
- 高仿今日头条
- Web打印组件jatoolsPrinter
- Android-Universal-Image-Loader图片异步加载并缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Tensorflow中实现leakyRelu操作详解(高效)
- Django def clean()函数对表单中的数据进行验证操作
- Python3爬虫中Splash的知识总结
- Laravel框架自定义公共函数的引入操作示例
- PHP PDOStatement::setFetchMode讲解
- Python QTimer实现多线程及QSS应用过程解析
- PHP count()函数讲解
- Laravel中9个不经常用的小技巧汇总
- PHP simplexml_load_string()函数实例讲解
- php文件操作之文件写入字符串、数组的方法分析
- php xhprof使用实例详解
- PHP获取远程http或ftp文件的md5值的方法
- PHP addslashes()函数讲解
- PHP+swoole+linux实现系统监控和性能优化操作示例
- PHP中PCRE正则解析代码详解