当前位置:编程学习 > JSP >>

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

答案: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){

     

上一个:Java.util----(转自网上)-(一)
下一个:Testing objectives for SCJP

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,