scala集合容器语法(一)
Day4集合容器基础语法11.元组:Tuple1 - Tuple22 1.1若干个单个的值包含在圆括号便构成元组: eg:val g=(1,1.2,'A') 三元 元组 //(Int,Double,Char)类型的元组 1.2映射是二元的元组,元组是不同类型的值的聚集 ("key",value) n=2 1.3//利用方法_1、_2、_3访问元组的组元 val h=g._1 或 val h=g _1 //或者利用隐式的模式匹配 val (first,second,three)=(1,3.14,"Free"); val (first,_)=(1,"hhhhhhhhhhhh") val (name,age,phone,address)=("tom",23,110,"南昌") 1.4元组可以用于函数需要返回不止一个值得情况。 举例来说,StringOps的partition方法返回的是一对字符串,分别包含了满足某个条件和不满足条件的字符:"New York".partition(_.isUpper) 1.5注意区分下边两个的不同 val x,y,z=(1,"hello",2) val (x,z)=(1,2) 2.映射:Map(Map集合中每个元素是一个二元元组) 2.1二元元组的表示方法: (key,value) 或 key -> value 2.2分为可变映射和不可变映射 mutable.Map[K,V] immutable.Map[K,V] Map <==> immutable.Map <==> Predef.Map 注意:scala.collection.Map 是immutable.Map和mutable.Map的超类 Scala优先采用不可变集合, scala.collection 包中的伴生对象产出不可变的集合 2.3构建Map映射对象 Map 是一个trait 和 object 因此构建方式只有:统一对象构建原则 Map(elem1,elem2,...) <===> Map.apply(elem1,...) 2.4构建一个空集合,可以使用empty方法 import scala.collection.mutable; val mutableMap=mutable.Map.empty[K,V] 注意:val map=muatble.Map(); val map=mutable.Map[K,V](); //请自行测试这两个map集合的区别。(Nothing是所有类的子类,最底层类) 2.5通过key获取value值 三种方式:map.apply(key) map.get(key) map.getOrElse(key,defaultValue) 2.6Option(类似于集合的类) 当前对象中只包含0个或1个元素。 子类:Some(elem) None 从Some中取值使用 get 注意:Option类是为了避免出现NullPointerException而设计。 2.7添加元素
2.8移除元素
2.9遍历集合 eg:for(elem <- map){ val key=elem._1 val value=elem._2 } //或: for( (key,value) <- map ){ println(key+":"+value) } //只遍历key值 map.keys map.keySet map.keysIterator //只遍历value值 map.values map.valuesIterator 2.10拉链操作 zip 将两个集合进行“等值连接” zipAll 将两个集合进行“全连接”,三个参数,第一个参数为连接的集合;第二个参数为原集合元素不足时的补位元素;第三个参数为连接集合元素不足时的补位元素; zipWithIndex 将集合中的每个元素变成一个二元元组,二元元组的_2即位当前元素在集合中的索引。 unzip 将容器中的二元元组拆分,将每个二元元组中的_1放到一个集合中,_2的放到一个集合中。即拆分成两个集合。 unzip3 将容器中的三元元组拆分,将每个三元元组中的_1放到一个集合中,_2的放到一个集合中,_3的放到一个集合中。即拆分成了三个集合。 eg:val price=List(2,10,8) val num=List(10,10) val collection=list1.zip(list2) val newColl=for( (price,num) <- collection )yield{ price*num }.sum val count=collection.map(x=> x._1*x._2).sum 3.集合1.集合分为:序列 集 映射 Traversable(Trait) | Iterable(Trait) ———————————————————————————- | | | Seq Set Map(Trait/object) 2.Seq是一个有先后次序的值得序列,允许存放重复元素。 2.1整体上分为:索引序列IndexedSeq,线性序列(链表)LinearSeq. Seq ———————————————————————————- | | | IndexedSeq Buffer LinearSeq | | | Array Vector Range | List LinkedList String StringBulid ArrayBuffer ListBuffer Queue Stack Stream View IndexSeq索引序列:允许我们通过整型的下标快速访问任意元素,如ArrayBuffer是带下标的。 LinearSeq线性序列:被分为了头尾部分,并且用head,tail和isEmpty方法等。 注意:Array其实不是真正的序列,是通过将Array包装成WrappedArray(mutable),才可以像集合一样使用。 3.SetSet是一组没有重复元素的集合。 Set ——————————————————————————— | | | | BitSet HashSet ListSet SortedSet | TreeSet 在SortedSet中,元素以某种排过序的顺序被访问。 4.MapMap是一组(K,V)对偶,其中键必须是唯一的。 Map ——————————————————————————— | | | | HashMap LinkedListMap ListMap SortedMap TreeMap SortedMap按照键的排序访问。 5.每个Scala集合特质或类,都有一个带有apply方法的伴生对象,这个apply方法可以用来构建该集合中的实例。 eg:Iterable(0xFF,0xFF00,0xFF0000) Seq(color.RED,color.GREEN,Color.BLUE) Map(color.RED -> -0xFF0000,Color.GREEN -> 0xFF00,Color.BLUE -> 0xFF) SortedSet("Hello","World") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |