集合
scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问!
集合的类主要在一下两个包中
- 可变集合包 scala.collection.mutable
- 不可变集合包 scala.collection.immutable 默认的
Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于 java 中的 String 对象
可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似于 java 中 StringBuilder 对象
建议:在操作集合的时候,不可变用符号,可变用方法
scala默认使用的是不可变的集合 , 因此使用可变的集合需要导入可变集合的包
scala的集合主要分成三大类
- Seq 序列
- Set 不重复集
- Map 键值映射集
注意: 所有的集合都继承自Iterator迭代器这个特质
不可变集合继承图

迭代器
java中的iterator
在java中用迭代器读取文件中的数据,每次返回一行数据- package com.doit;
- import java.io.BufferedReader;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Iterator;
- class MyHero implements Iterator<String> {
- BufferedReader buffer = null;
- String line = null;
- public MyHero() {
- try {
- buffer = new BufferedReader(new FileReader("data/hero.txt"));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- @Override
- public boolean hasNext() {
- try {
- line = buffer.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return line != null;
- }
- @Override
- public String next() {
- return line;
- }
- }
- public class MyIterator{
- public static void main(String[] args) {
- MyHero myHero = new MyHero();
- while (myHero.hasNext()){
- System.out.println(myHero.next());
- }
- }
- }
复制代码 在java中用迭代器读取mysql表中的数据,每次返回一行数据java中的Iterable
代表可迭代的,返回的是一个迭代器- package com.doit;
- import java.util.Iterator;
- public class ReadTableIterable implements Iterable<Login>{
- @Override
- public Iterator iterator() {
- return new ReadTable();
- }
- }
- //测试
- package com.doit;
- import java.util.Iterator;
- public class Test3 {
- public static void main(String[] args) {
- ReadTableIterable logins = new ReadTableIterable();
- //可迭代的都会有一个迭代器对象,获取出来后用hasnext next获取数据
- Iterator iterator = logins.iterator();
- while (iterator.hasNext()){
- System.out.println(iterator.next());
- }
- //可迭代的java底层都封装了增强for循环,也可以直接使用
- for (Login login : logins) {
- System.out.println(login);
- }
- }
- }
复制代码 scala中的 iterator
[code]package com.doit.day01.day02import scala.io.{BufferedSource, Source}object MyIter { def main(args: Array[String]): Unit = { val iter: MyIter = new MyIter while (iter.hasNext){ println(iter.next()) } }}class MyIter extends Iterator[String]{ //读取数据 private val source: BufferedSource = Source.fromFile("data/hero.txt") private val lines: Iterator[String] = source.getLines() //用scala中返回迭代器中的hasNext方法直接判断 override def hasNext: Boolean = lines.hasNext //用scala中返回迭代器中的next方法获取数据 override def next(): String = lines.next()}7.1.4scala中的IterableScalapackage com.doit.day01.day02import scala.io.{BufferedSource, Source}object MyIter { def main(args: Array[String]): Unit = { val iter: MyIter1 = new MyIter1 val iterator: Iterator[String] = iter.iterator while (iterator.hasNext){ println(iterator.next()) } for (elem |