定长数组Array

定义定长数组用Array,有如下几种方法:

  • 初始化一个长度为8的定长数组,其所有元素默认值均为0

     scala> new Array[Int](8)
    res0: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0)
  • 调用静态方法,直接为数组赋值

     scala> val arr2 = Array[Int](8)
    arr2: Array[Int] = Array(8) scala> arr2.length
    res16: Int = 1 scala> Array(1,"1")
    res17: Array[Any] = Array(1, 1) scala> val arr3 = Array(1,"string",3.14)
    arr3: Array[Any] = Array(1, string, 3.14) scala> val arr4 = Array(1,2,3)
    arr4: Array[Int] = Array(1, 2, 3)

变长数组ArrayBuffer

  • 需要导入import scala.collection.mutable.ArrayBuffer包

     scala> import scala.collection.mutable.ArrayBuffer
    import scala.collection.mutable.ArrayBuffer
  • 初始化有以下两种方法:

     scala> import scala.collection.mutable.ArrayBuffer
    import scala.collection.mutable.ArrayBuffer scala> val ab =new ArrayBuffer[Int]()
    ab: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer() scala> val ab1 = ArrayBuffer(1,2)
    ab1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2)
  • 使用+=追加(多个)元素,使用++= 追加数组

     scala> ab += 1
    res0: ab.type = ArrayBuffer(1) scala> ab += 2
    res1: ab.type = ArrayBuffer(1, 2) scala> ab += (3,4,5)
    res2: ab.type = ArrayBuffer(1, 2, 3, 4, 5) scala> ab ++= Array(6,7)
    res4: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 7) scala> ab ++= ArrayBuffer(8,9)
    res5: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
  • 指定位置插入元素:第一个入参是指定要插入的下标,后面的元素则插入在该下标及其之后

      scala> ab
    res0: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6,7, 8, 9) scala> ab.insert(0,0) scala> ab
    res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) scala> ab.length
    res3: Int = 10 scala> ab.insert(11,11)
    java.lang.IndexOutOfBoundsException: 11
    at scala.collection.mutable.ArrayBuffer.insertAll(ArrayBuffer.scala:139)
    at scala.collection.mutable.BufferLike$class.insert(BufferLike.scala:167)
    at scala.collection.mutable.AbstractBuffer.insert(Buffer.scala:49)
    ... 32 elided scala> ab.insert(10,10) scala> ab
    res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    注意:插入的下标 <= 该数组的长度,若插入的下标为数组的长度则表示在末尾追加;若插入的下标大于该数组的长度,则报错数组越界 IndexOutOfBoundsException

  • 删除指定位置的元素:第一个入参是指定要删除的下标;第二个入参是要删除的数据的长度,默认值为1

     scala> ab.length
    res9: Int = 11 scala> ab.remove(11)
    java.lang.IndexOutOfBoundsException: 11
    at scala.collection.mutable.ResizableArray$class.apply(ResizableArray.scala:43
    )
    at scala.collection.mutable.ArrayBuffer.apply(ArrayBuffer.scala:48)
    at scala.collection.mutable.ArrayBuffer.remove(ArrayBuffer.scala:169)
    ... 32 elided scala> ab.remove(10)
    res11: Int = 10 scala> ab
    res12: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) scala> ab.remove(9,2)
    java.lang.IndexOutOfBoundsException: 9
    at scala.collection.mutable.ArrayBuffer.remove(ArrayBuffer.scala:158)
    ... 32 elided scala> ab.length
    res14: Int = 10 scala> ab.remove(9,1) scala> ab
    res16: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8)

    注意:要删除的下标 < 数组的长度, 否则报错数组越界 IndexOutOfBoundsException

  • 遍历数组

    请参考笔记(二)for循环

  • 数组常用算法

     用filter方法进行过滤

    scala> ab
    res22: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 6, 7, 8) scala> ab.filter(_ % 2 == 0)
    res23: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 2, 4, 6, 8)

    用map方法进行数组转换

     scala> ab
    res24: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8) scala> ab.map(_ * 10)
    res25: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 10, 20, 30, 40, 50, 60, 70, 80)

    例:将数组中偶数取出来乘以100

     scala> ab
    res26: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8) scala> ab.filter(_ % 2 == 0).map(_*100)
    res27: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 200, 400, 600, 800)

    数组求和、最小值、最大值、排序

    scala> ab
    res35: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 10, 50, 30, 5, 6, 7, 8) scala> ab.sum
    res36: Int = 126 scala> ab.min
    res38: Int = 0 scala> ab.max
    res39: Int = 50 scala> ab.sorted
    res40: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 30, 50)

Scala学习笔记(四)—— 数组的更多相关文章

  1. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  2. [Scala]Scala学习笔记二 数组

    1. 定长数组 如果你需要一个长度不变的数组,可以使用Scala中的Array. val nums = new Array[Int](10) // 10个整数的数组 所有元素初始化为0 val str ...

  3. scala 学习笔记四 匿名函数

    1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...

  4. Objective-C 学习笔记(四) 数组

    Objective-C 数组作为函数参数传递 如果想在一个函数作为参数,通过一维数组,就必须声明函数形式参数 方式一    指针作为形式参数 - (void) myFunction(int *) pa ...

  5. [Scala]Scala学习笔记四 类

    1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...

  6. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  7. PHP学习笔记之数组篇

    摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇   一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...

  8. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  9. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  10. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

随机推荐

  1. 设计模式:观察者(Observer)模式

    设计模式:观察者(Observer)模式 一.前言   观察者模式其实最好的名称应该是“发布订阅”模式,和我们现在大数据之中的发布订阅方式比较类似,但是也有区别的地方,在上一个设计模式,我们学习的是仲 ...

  2. February 14 2017 Week 7 Tuesday

    Love lives in cottages as well as in courts. 爱情无贵贱,贫富皆有之. Many people, especially boys, complain tha ...

  3. 《React 与 Redux 开发实例精解》出版了!

    <React 与 Redux 开发实例精解>出版了! <React 与 Redux 开发实例精解>出版了! 关于 React 与 Redux React 与 Redux, 一个 ...

  4. win10 x64 注册ZQDeviceOcx.ocx控件

    正常的方式在32位系统下可行, 但是在64位系统下是不可行的. 在64位系统中正确的注册步骤是: 1. 将对应的ocx和dll放到C:\Windows\SysWOW64目录下. 2. 然后找到C:\W ...

  5. mongdb时间类型

    Date() 显示当前的时间new Date 构建一个格林尼治时间   可以看到正好和Date()相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间ISODate() 也是格林 ...

  6. 用eclipse pydev 创建一个新py文件时 文件的coding设置问题

    问题: 当安装好eclipse和pydev后,创建一个project, 创建一个新的py文件,文件头都会自带中文时间.这样在编译的时候会报错. 解决办法之一: 通过设置,可以使新建的文件的文件头自动带 ...

  7. 「hihocoder1413 Rikka with String」

    题目 哈哈哈哈哈哈哈哈哈哈我还没自闭 好像前后调了两天了 哈哈哈哈哈哈哈哈哈哈我还没自闭 这道题就是给定一个小写字母串,回答分别把每个位置上的字符替换为\(#\)后的本质不同的子串数 首先就是跨过这个 ...

  8. 从源码看String,StringBuffer,StringBuilder的区别

    前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...

  9. AutoLayout对 scrollview的contentSize 和contentOffset属性的影响

      AutoLayout对 scrollview的contentSize 和contentOffset属性的影响 问题一.iOS开发中,如果在XIB文件中创建一个scrollview,同时给它设置布局 ...

  10. CSS权重的比较方法

    CSS的权重如下: !important  Infinity正无穷 行间样式  1000 id     100 class|属性|唯类 10 标签|伪元素  1 通配符   0 256进制 当出现多个 ...