立聪堂德州十三局店 发表于 2023-6-18 19:30:06

Scala集合

集合

scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问!
集合的类主要在一下两个包中

[*]可变集合包    scala.collection.mutable
[*]不可变集合包 scala.collection.immutable   默认的
Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于 java 中的 String 对象
可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似于 java 中 StringBuilder 对象
建议:在操作集合的时候,不可变用符号,可变用方法
scala默认使用的是不可变的集合 , 因此使用可变的集合需要导入可变集合的包
scala的集合主要分成三大类

[*]Seq 序列
[*]Set 不重复集
[*]Map 键值映射集
注意: 所有的集合都继承自Iterator迭代器这个特质
不可变集合继承图
https://img2023.cnblogs.com/blog/1742816/202306/1742816-20230618192851963-1911817619.png
迭代器

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表中的数据,每次返回一行数据
package com.doit;

import java.sql.*;
import java.util.Iterator;

public class ReadTable implements Iterator<Login> {
    ResultSet resultSet = null;
    public ReadTable(){
      try {
            Class.forName("com.mysql.jdbc.Driver");
      } catch (ClassNotFoundException e) {
            e.printStackTrace();
      }
      try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/football", "root", "123456");
            PreparedStatement pps = conn.prepareStatement("select * from login ");
            resultSet = pps.executeQuery();
      } catch (SQLException e) {
            e.printStackTrace();
      }
    }

    @Override
    public boolean hasNext() {
      boolean flag = false;
      try {
            flag = resultSet.next();
      } catch (SQLException e) {
            e.printStackTrace();
      }
      return flag;
    }

    @Override
    public Login next() {
      Login login = new Login();
      try {
            login.setId(resultSet.getInt(1));
            login.setUser_id(resultSet.getInt(2));
            login.setClient_id(resultSet.getInt(3));
            login.setDate(resultSet.getString(4));
      } catch (SQLException e) {
            e.printStackTrace();
      }
      return login;
    }


}


class Login {
    private int id;
    private int user_id;
    private int client_id;
    private String date;

    public Login() {
    }

    public Login(int id, int user_id, int client_id, String date) {
      this.id = id;
      this.user_id = user_id;
      this.client_id = client_id;
      this.date = date;
    }

    public int getId() {
      return id;
    }

    public void setId(int id) {
      this.id = id;
    }

    public int getUser_id() {
      return user_id;
    }

    public void setUser_id(int user_id) {
      this.user_id = user_id;
    }

    public int getClient_id() {
      return client_id;
    }

    public void setClient_id(int client_id) {
      this.client_id = client_id;
    }

    public String getDate() {
      return date;
    }

    public void setDate(String date) {
      this.date = date;
    }

    @Override
    public String toString() {
      return "login{" +
                "id=" + id +
                ", user_id=" + user_id +
                ", client_id=" + client_id +
                ", date='" + date + '\'' +
                '}';
    }
}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

package com.doit.day01.day02import scala.io.{BufferedSource, Source}object MyIter {def main(args: Array): Unit = {    val iter: MyIter = new MyIter    while (iter.hasNext){      println(iter.next())    }}}class MyIter extends Iterator{//读取数据private val source: BufferedSource = Source.fromFile("data/hero.txt")private val lines: Iterator = 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): Unit = {    val iter: MyIter1 = new MyIter1    val iterator: Iterator = iter.iterator    while (iterator.hasNext){      println(iterator.next())    }    for (elem
页: [1]
查看完整版本: Scala集合