一,基本概念
1,映射
Map与HashMap与TreeMap,SotredMap等区别:
1、HashMap键无序,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,在Map 中插入、删除和定位元素,HashMap 是最好的选择;
2、LinkedHashMap 是HashMap的一个子类,键保存了插入的顺序,使用Iterator遍历时,得到的也是插入顺序的记录;
3、TreeMap默认按键的升序排序,可以定制。
4、HashTable 线程安全,键不能为null,与HashMap类似,但效率较低,HashMap如果需要实现同步,可以使用Collections. synchronizedMap或ConcurrentHashMap 。
课后习题4.2
/* 编写一段程序,从文件中读取单词。用一个可变映射来清点每个单词出现的频率。读取这些单词的操作可以使用java.util.Scanner: */ //method1 val in=new java.util.Scanner(new java.io.File("/home/user/people.txt")) val map=new HashMap[String,Int] while (in.hasNext()){ map(in.next())=map.getOrElse(i,0)+1 } map //method2 val file=scala.io.Source.fromFile("/home/usr/people.txt").mkString val tokens=file.split("\\s+") //\\s表示 空格,回车,换行等空白符,+号表示一个或多个的意思, val map=scala.collection.mutable.HashMap[String,Int] for (word <- tokens) map[word]=map.getOrElse(word,0)+1 map
课后习题4.7
/*按格式打印出出所有Java系统属性的表格*/ import scala.collection.JavaConversions.propertiesAsScalaMap val props:scala.collection.Map[String,String]=System.getProperties() val keys=props.keySet val keyLength=for (key <- keys) yield(key.length) val maxKeyLength=keyLength.max for ((k,v) <- props){ print(k) print(" "*(maxKeyLength-k.length)) print("|") println(v) }
二,类与对象
1,针对方法,带()多指改变了对象状态方法,而不带只是简单的读取
2,类构造方法@BeanProperty var name:String=_: 内部类和 外部类可以调用getName()和setName()方法 加private时,只有内部类可以
2.2 主构造函数法:class People(val name:String,private var age:Int) name能被内部类和外部对象读取,age 能在内部类中读写,但不被外部访问
1,class Peo(private val name:String) val p=new Peo("z") p.<tab> asInstanceOf isInstanceOf toString (无name不可读和写) ,2,class Peo(val name:String) val p=new Peo("z") p.<tab> asInstanceOf isInstanceOf name toString (name属性可读) 3,class Peo( var name:String) val p=new Peo("z") p.<tab> asInstanceOf isInstanceOf name name_= toString (name,可读和可写) 4,class Peo( private var name:String) val p=new Peo("z") p.<tab> asInstanceOf isInstanceOf toString (无name不可读和写)