Scala集合操作

package Basic

import scala.collection.mutable.ArrayBuffer
import com.sun.xml.internal.ws.org.objectweb.asm.Item

/**
 * 大数据是数据的集合以及对数据集合的操作技术的统称,具体来说:
 * 1、数据集合,会涉及数据的搜集、存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kafka;
 * 2、对数据集合的操作技术,目前全球最火爆的是Spark;
 * 
 * Spark的框架实现语言是Scala,首选的应用程序开发语言也是Scala,所以Scala对集合以及集合操作的支持就至关重要,且必须异常强大。
 * 一个补充说明,Spark中对很多数据的操作算子和Scala中对集合的操作算子是一样的,也就是说掌握了Scala中集合的操作,基本上就可以直接操作Spark集合了。
 * 
 *  关于Scala中数组的创建与操作:
 *  1、最原始的创建数组的方式是,比如:val array=new Array[Int](5),指定数组的类型是Int,其固定长度是5个
 *  2、对数组元素访问的时候下标的范围是0到length-1的长度,超过length-1的话会出现java.lang.ArrayIndexOutOfBoundsException
 *  3、最常用和经典创建数组的方式,比如,Array[Int](1,2,3,4,5),直接通过Array类名并传入参数的方式来创建数组实例,
 *  在背后的实现是调用Array的工厂方法模式apply()来构建出数组及数组内容的。
 *  4、关于Array本身在底层的实现是借助了JVM平台上的Java语言的数组实现,是不可变的。
 *  5、如果我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,然后使用ArrayBuffer这个可变数组.
 *  6、关于ArrayBuffer增加元素,默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高。
 *  7、当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要。其实,即使是Array,其本身虽然不可变动(元素不可删减),
 *  但是我们可以修改Array中每个元素的内容,所以多线程操作的时候,还是必须考虑并发写的问题。
 *  8、如果想在已经有的数组基础上,通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成;这个在大数据中意义重大;
 *  第一点,它是在不修改已有的Array内容的基础上完成的,非常适合于大数据处理;
 *  第二点,在大数据处理中,例如Spark中业务操作的核心思想就类似于yield,来通过使用function对每个元素操作获得新的元素构成新的集合,其实就是新的RDD,例如:MapPartitionsRDD 
 *  9、集合的操作往往可以通过丰富的操作算子,例如:filter来过滤符合条件的元素,例如map来进行每一个元素的加工。
 */
object HelloArrayOps {
  def main(args: Array[String]): Unit = {
//    val array=new Array[Int](5)
    //在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推导的能力,而我们已经传进了
    //当前数组Array的值,所以可以根据值来推导出类型
    val array=Array(1,2,3,4,5) 
    
//    val array=Array.apply(1,2,3,4,5)
    array(0)=10 //数组的索引下标是从0开始的
    
    for(Item <- array){
      println(Item)
    }
    
    val names=Array("Scala","Kafka","Spark")
     for(Item <- names){
      println(Item)
    }
    
    val arrayBuffer=ArrayBuffer[Int]()
    arrayBuffer +=1
    arrayBuffer +=2
    arrayBuffer +=(4,5,6,7,8,9,10)
    arrayBuffer ++=Array(1,2,3) //在结尾添加数组元素
    arrayBuffer.insert(arrayBuffer.length-1, 100,1000)
    arrayBuffer.remove(arrayBuffer.length-2)
    arrayBuffer.toArray //当需要多线程并发操作的时候,把ArrayBuffer转换成为Array就非常重要。
    
    for(item <- arrayBuffer) println(item)
    for(i <- 0 until array.length) println(array(i)+" ")
    println()
    for(i <- 0 until(array.length,2)) println(array(i)+" ")
    println()
    for(i <- (0 until array.length).reverse) println(array(i)+" ")
    println()
    
    println("Sum="+array.sum)
    println("Max="+array.max)
    //排序
    //方法一
//    val sortArray=array.sortWith(_<_)
//    sortArray.foreach { item => println(item) }
    //方法二
//    scala.util.Sorting.quickSort(array)
//    array.foreach {item => println(item) }
    //方法三
    val sortArray=array.sorted
    sortArray.foreach { item => println(item) }
    
    println(array.mkString(","))
    println(array.mkString("*****",",","******"))
    
    val arryAddedOne =for(item <- array) yield item+1
    println(arryAddedOne.mkString(" "))
    
    val arrayEven=for(item <- array if item%2==0) yield item
    println(arrayEven.mkString(","))
    
    println(array.filter { x => x%2==0 }.mkString(" & "))
    println(array.filter {_%2==0}.map { x => x*10 }.mkString(" & "))
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值