Java.util----(转自网上)-(二)

发表于:2007-07-04来源:作者:点击数: 标签:
13.4.2 Stack: 在Vector中加了后进先出方法 (1) 方法 public boolean empty() public Object peek(): (仅)查看栈顶元素。 public Object pop():空时产生异常。 public Object push(Object item):空时产生异常。 public int search(Object item): 离栈顶(1)
13.4.2 Stack: 在Vector中加了后进先出方法

  (1) 方法

public boolean empty()
public Object peek(): (仅)查看栈顶元素。
public Object pop():  空时产生异常。
public Object push(Object item):空时产生异常。
public int search(Object item): 离栈顶(1)距离。找不到返回-1.
  (2) 例子:东西转借

    import java.util.Stack

    public class Borrow{

     private String itemName;

      private Stack hasIt = new Stack();

      public Borrow(String name,String owner){

         itemName = name;

         hasIt.push(owner); //首先压进主人的名字

       }

     public void borrow(String borrower){

        hasIt.push(borrower);

     }

     public String currentHolder(){

       return (String)hasIt.peek();

     }

     public String returnIt(){

       String ret=(String)hasIt.pop();

       if(hasIt.empty());  //不小心把主人弹出

        hasIt.push(ret); //将主人名字入栈

        return ret;

     }

   }


13.5 Dictionary, Hashtable, Properties

13.5.1抽象类Dictionary: {<key, value>}

public abstract Object put(Object key,Object element)
将element按key放在目录中。返回按key存放的旧元素。若该key 在目录中未定义,则返回null。

public abstract Object get(Object key)
返回key相关联的对象,若未定义,则返回null。

public abstract Object remove(Object key)
删去,并返回该元素。若key不在目录中,返回null。

public abstract int size():  元素个数。
public abstract boolean isEmpty(): 若空返回null。
public abstract Enumeration keys(): 返回关键字的枚举:  
public abstract Enumeration elements(): 返回元素的枚举。
13.5.2Hashtable

Hashtable是常用的关键字/元素对象存储机制。通用,简洁,效率高。Hashtabl有能力,
Hash表由hashCode(Key)方法生成hash码,应尽可能地减少冲突,
(1) Constructors

public Hashtable()/(int initCapacity)/(int initCapacity, float loadFactor): loadFactor:0.0-1.0(0.75)
当元素个数超过了负载因子同容量的乘积时,要改变大小。
(2) Methods(除Dictionary方法外)

public synchronized boolean containsKey(Object key)
若含有同关键字key对应的元素,返回true。

public synchronized boolean contains(Object element)
比containsKey方法费时得多。

public synchronized void clear(): 清除,不包含任何关键字。
public synchronized Object clone():关键字及元素不克隆。
(3) Example

Hashtable ht = new Hashtable();

ht.put(*one*, new Integer(1));

ht.put(*two*,new Integer(2));

ht.put(*three*,new Integer(3));

System.out.println(*TWO: *+ht.get(*two*))


5.3 Properties: <name(string),value(string)>
(1) Fields:    protected Properties defaults;

(2) Constructors     

public Properties()
public Properties(Properties defaults)
以defaults创建一个空表,用于查找未在表中指定的性质。

  (3) Methods

public String getProperty(String key)
取元素,若没,则查找缺省表(若有的话)。找不到返回null。

public String getProperty(String key,String default)
找不到时返回default。

private void save(OutputStream out,String header)
将内容存到outputStream中。header作为单行注解写到输出流首部。

public synchronized void load(InputStream in) throws IOException
从inputStream中加载先前用save创建的表。不涉及缺省值。

public Enumeration propertyNames(): 关键字的枚举
public void list(PrintStream  out)
  向PrintStream流中打印当前表。对调试非常有用。

  (4) Example

Properties prop = new Properties();

prop.put(*Title*, *put title here*);

prop.put(*Author*, *your name here*);

prop.put(*isbn*, *isbn not set*);

Properties book = new Properties(prop);

book.put(*Title*, *java *);

book.put(*Author*, *Xu*);

//  book.getProperty(*Title*);  ?    java

//  book.getProperty(*isbn*);  ?    isbn not set

//  book.getProperty(*ean*,*!!!*);?  !!!


13.6 Observer Interface/Observable Class

     某对象(必须是Observable子类)变化时,可能要通知若干其它(observer)对象。Observable对象维护Observer对象表,当发生变化时,通过调用这些Observer对象的update方法通知它们。

13.6.1 The Observer Interface

public abstract void update(Observable obj, Object arg)

13.6.2 The Observable Class

public synchronized void addObserver(Observer o)
在observer表中加一个Observer。

public synchronized void deleteObserver(Observer o)
从observer表中删去一个Observer。

public synchronized void deleteObservers()
从observer表中删去所有Observer对象。

public synchronized void countObservers()
返回observer表中的observer数。

public synchronized void notifyObservers(Object arg)
通知表中所有Observer 对象并清除*对象变更*标志。对表中每个对象,调用update方法,第一个参数是当前 Observable对象,第二个参数是arg。

public void notifyObservers():=notifyObservers(null)。
public void setChanged(): 指明当前对象已更改。
public void clearChanged(): 指明当前对象不再更改,或最近更改已通知有关Observer (自动被notifyObservers调用)
public boolean hasChanged(): 确定当前对象是否更改过(如最近调用了set返回true,如最近调用了clear返回false)。
13.6.3 Example

(1) The Users Class

    import java.util.*;

    public class Users extends Observable{

      private Hashtable loggdIn = new Hashtable();

     public void login(String name,String passwod)

                throws BadUserException{

       if (!passwordValid(name,password))

         throw new BadUserException(name);

      UserState state = new UserState(name);

       loggedIn.put(name,state):

       setChanged();

       notifyObservers(state);

    }

    public void logout(UserState state){

      loggedIn.remove(state.name());

      setChanged();

      notifyObservers(state);

     }

     //...

}


(2) The Eye Class: 注视Users 对象

import java.util.*;

public class Eye implements Observer {

    Users watching;

    public Eye(Users users) {

     watching = users;

     watching.addObserver(this);

    }

  public void update(Observable users,Object whichState){

      if(users!= watching)

        throw new IllegalArgumentException();

     UserState state = (UserState)whichState;

      if(watching.loggedIn(state))     //user logged in

        addUser(state);             // add my list

      else

        removeUser(state);           //remove from list

    }

}


13.7 Date

  (1) 数据范围

year(四位),   month( 1-12),   date(1-31)

hours(0-23),   min(0-59),      seconds(0-61考虑润秒)

  (2) Constructors

public Date(): 创建一个代表当时日期和时间的Date对象。
public Date(int year,int month,int date,int hrs,int min,int sec)
以给定的年,月,日,时,分,秒建Date对象。

public Date(int year,int month,int date,int hrs,int min)
等效于Date(year,month,date,hrs,min,0),即以指定的分开始。

public Date(int year,int month,int date)
等效于Date(year,month,date,0,0,0),即给定日期的子夜开始。

public Date(String s)
用字符串表示的日期、 时间来创建Date对象。

  (3) Methods

public static longUTC(int year,int month,int date,int hrs,int min,int sec): 用给定的日期来计算UTC值。
public static long parse(String s)
给定时间字符串表示,进行语法分析,返回时间值。可以接受多种语法,但最重要的是接受IETF标准日期语法,形如"Sat,12 Aug 1995 13 :30:00 GMT"字符串。它还能理解美国大陆的时区缩写形式,但为通用起见,要用一个时区的偏移,如 "Sat,12 Aug 1995 13:30:00 GMT+0430"( 格林威治子午线以西4小时,30分)。若没指定时区,则假定为本地时区。GMT和 UTC被认作为等价的时区指定。

public Date(long date)   
创建一个日期,在Date对象创建之前相应的域已规范化了,该方法接受本类中方法parse或UTC的返回值。

public int getYear(): 取年份,总是大于1900。
public int getMonth(): 返回值为0至11,代表一月至十二月。
public int getDate(): 返回月中的日子。
public int getDay(): 返回0至6,代表星期日至星期六。
public int getHours(): 返回小时数,范围为0-23。
public int getMinutes(): 返回分钟数,范围为0-59。
public int getSeconds(): 返回秒数,范围为0-61。
public long getTime(): 返回UTC的时间
public int getTimezoneoffset()
返回本时区同标准时区的时间差(以分为单位)。该值应为常数, 除了在考虑夏时制时,会将本地时间按季节变更。

public void setYear(int year): 置年,年至少为1900。
public void setMonth(int month): 置月。
public void setDate(int date): 置日。
public void setDay(int day): 置星期几,表示法同前。
public setHouse(int houae): 置小时。
public setMinutes(int minutes): 置分钟。
public setSeconds(int seconds): 置秒。
public boolean before(Date other)
若现在的日期时间小于other返回true。

public boolean after(Date other)
若现在的日期时间大于other返回true。

public boolean equals(Object other)
若现在的日期时间等于other返回true。(UTC表示)

public int hashCode()
计算Hash码,这样就使Date对象可作为Hash表的关键字。

public String toString()
转换成字符串,形如"Fri Oct 13 14:33;57 EDT 1995"。

public String toLocaleString()
按当地的习惯把日期、时间转换成字符串。例如在美国用June 13表示日期,而欧洲大部分地区习惯用13 June表示日期。

public String toGMTString()
按GMT的约定格式把日期、时间转换成字符串,形如:d mon yyyy hh:mm:ss GMT。


13.8 Random

   (1) Constructors

public Random(): 创建一个新随机数发生器,种子初始化为基于当前时间的一个值。
public Random(long seed): 创建一个新的随机数发生器,种子为指定的seed。用相同种子seed 建立的Random对象返回的伪随机数序列是相同的。
   (2) Methods

public synchronized void setSeed(long seed)
随机数发生器的种子置为seed 。 任何时候都能调用该方法并用这给定的seed复位这个序列。

public int nextInt()
返回在区间Interger.MIN_VALUE和Integer.MAX_ VALUE上均匀分布的一个伪随机int值。

public long nextLong()
返回在区间Long.MIN_VALUE和 Long. MAX_VALUE 上均匀分布的一个伪随机long值。

public float nextFloat()
返回在区间Float.MIN_VALUE和Float.MAX_VALUE 上均匀分布的一个伪随机float值。

public double nextDouble()
返回在区间Double.MIN_VALUE和Double.MAX_VALUE 上均匀分布的一个伪随机double值。

public synchronized double nextGaussian()
返回一个均值是0.0,标准偏差是1.0的高斯分布的伪随机值。

原文转自:http://www.ltesting.net