Scala集合

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

集合

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

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

  • Seq 序列
  • Set 不重复集
  • Map 键值映射集
注意: 所有的集合都继承自Iterator迭代器这个特质
不可变集合继承图

迭代器

java中的iterator

在java中用迭代器读取文件中的数据,每次返回一行数据
  1. package com.doit;
  2. import java.io.BufferedReader;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.util.Iterator;
  7. class MyHero implements Iterator<String> {
  8.     BufferedReader buffer = null;
  9.     String line = null;
  10.     public MyHero() {
  11.         try {
  12.             buffer = new BufferedReader(new FileReader("data/hero.txt"));
  13.         } catch (FileNotFoundException e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17.     @Override
  18.     public boolean hasNext() {
  19.         try {
  20.             line = buffer.readLine();
  21.         } catch (IOException e) {
  22.             e.printStackTrace();
  23.         }
  24.         return line != null;
  25.     }
  26.     @Override
  27.     public String next() {
  28.         return line;
  29.     }
  30. }
  31. public class MyIterator{
  32.     public static void main(String[] args) {
  33.         MyHero myHero = new MyHero();
  34.         while (myHero.hasNext()){
  35.             System.out.println(myHero.next());
  36.         }
  37.     }
  38. }
复制代码
在java中用迭代器读取mysql表中的数据,每次返回一行数据
  1. package com.doit;
  2. import java.sql.*;
  3. import java.util.Iterator;
  4. public class ReadTable implements Iterator<Login> {
  5.     ResultSet resultSet = null;
  6.     public ReadTable(){
  7.         try {
  8.             Class.forName("com.mysql.jdbc.Driver");
  9.         } catch (ClassNotFoundException e) {
  10.             e.printStackTrace();
  11.         }
  12.         try {
  13.             Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/football", "root", "123456");
  14.             PreparedStatement pps = conn.prepareStatement("select * from login ");
  15.             resultSet = pps.executeQuery();
  16.         } catch (SQLException e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20.     @Override
  21.     public boolean hasNext() {
  22.         boolean flag = false;
  23.         try {
  24.             flag = resultSet.next();
  25.         } catch (SQLException e) {
  26.             e.printStackTrace();
  27.         }
  28.         return flag;
  29.     }
  30.     @Override
  31.     public Login next() {
  32.         Login login = new Login();
  33.         try {
  34.             login.setId(resultSet.getInt(1));
  35.             login.setUser_id(resultSet.getInt(2));
  36.             login.setClient_id(resultSet.getInt(3));
  37.             login.setDate(resultSet.getString(4));
  38.         } catch (SQLException e) {
  39.             e.printStackTrace();
  40.         }
  41.         return login;
  42.     }
  43. }
  44. class Login {
  45.     private int id;
  46.     private int user_id;
  47.     private int client_id;
  48.     private String date;
  49.     public Login() {
  50.     }
  51.     public Login(int id, int user_id, int client_id, String date) {
  52.         this.id = id;
  53.         this.user_id = user_id;
  54.         this.client_id = client_id;
  55.         this.date = date;
  56.     }
  57.     public int getId() {
  58.         return id;
  59.     }
  60.     public void setId(int id) {
  61.         this.id = id;
  62.     }
  63.     public int getUser_id() {
  64.         return user_id;
  65.     }
  66.     public void setUser_id(int user_id) {
  67.         this.user_id = user_id;
  68.     }
  69.     public int getClient_id() {
  70.         return client_id;
  71.     }
  72.     public void setClient_id(int client_id) {
  73.         this.client_id = client_id;
  74.     }
  75.     public String getDate() {
  76.         return date;
  77.     }
  78.     public void setDate(String date) {
  79.         this.date = date;
  80.     }
  81.     @Override
  82.     public String toString() {
  83.         return "login{" +
  84.                 "id=" + id +
  85.                 ", user_id=" + user_id +
  86.                 ", client_id=" + client_id +
  87.                 ", date='" + date + '\'' +
  88.                 '}';
  89.     }
  90. }
复制代码
java中的Iterable

代表可迭代的,返回的是一个迭代器
  1. package com.doit;
  2. import java.util.Iterator;
  3. public class ReadTableIterable implements Iterable<Login>{
  4.     @Override
  5.     public Iterator iterator() {
  6.         return new ReadTable();
  7.     }
  8. }
  9. //测试
  10. package com.doit;
  11. import java.util.Iterator;
  12. public class Test3 {
  13.     public static void main(String[] args) {
  14.         ReadTableIterable logins = new ReadTableIterable();
  15.         //可迭代的都会有一个迭代器对象,获取出来后用hasnext next获取数据
  16.         Iterator iterator = logins.iterator();
  17.         while (iterator.hasNext()){
  18.             System.out.println(iterator.next());
  19.         }
  20.         //可迭代的java底层都封装了增强for循环,也可以直接使用
  21.         for (Login login : logins) {
  22.             System.out.println(login);
  23.         }
  24.     }
  25. }
复制代码
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表