分享
 
 
 

J2SE综合:对java.util的总结八

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

15.10.3 Stack

Stack是Vector的一个子类,它实现标准的后进先出堆栈。Stack仅仅定义了创建空堆栈的默认构造函数。Stack包括了由Vector定义的所有方法,同时增加了几种它自己定义的方法,具体总结在表15-11中。

表15-11 由Stack 定义的方法

方法描述

boolean empty( ) 如果堆栈是空的,则返回true,当堆栈包含有元素时,返回false

Object peek( ) 返回位于栈顶的元素,但是并不在堆栈中删除它

Object pop( ) 返回位于栈顶的元素,并在进程中删除它

Object push(Object element) 将element压入堆栈,同时也返回element

int search(Object element) 在堆栈中搜索element,如果发现了,则返回它相对于栈顶的偏移量。否则,返回-1

调用push( )方法可将一个对象压入栈顶。调用pop( )方法可以删除和返回栈顶的元素。当调用堆栈是空的时,如果调用pop( )方法,将引发一个EmptyStackException异常。调用peek( )方法返回但不删除栈顶的对象。调用empty( )方法,当堆栈中没有元素时,返回true.search( )方法确定一个对象是否存在于堆栈,并且返回将其指向栈顶所需的弹出次数。下面是一个创建堆栈的例子,在例子中,将几个整型(Integer)对象压入堆栈,然后再将它们弹出。

// Demonstrate the Stack class.

import java.util.*;

class StackDemo {

static void showpush(Stack st, int a) {

st.push(new Integer(a));

System.out.println("push(" + a + ")");

System.out.println("stack: " + st);

}

static void showpop(Stack st) {

System.out.print("pop - ");

Integer a = (Integer) st.pop();

System.out.println(a);

System.out.println("stack: " + st);

}

public static void main(String args[]) {

Stack st = new Stack();

System.out.println("stack: " + st);

showpush(st, 42);

showpush(st, 66);

showpush(st, 99);

showpop(st);

showpop(st);

showpop(st);

try {

showpop(st);

} catch (EmptyStackException e) {

System.out.println("empty stack");

}

}

}

下面是由该程序产生的输出。注意对于EmptyStackException的异常处理程序是如何被捕获以便于能够从容地处理堆栈的下溢:

stack: [ ]

push(42)

stack: [42]

push(66)

stack: [42, 66]

push(99)

stack: [42, 66, 99]

pop - 99

stack: [42, 66]

pop - 66

stack: [42]

pop - 42

stack: [ ]

pop - empty stack

15.10.4 Dictionary

字典(Dictionary)是一个表示关键字/值存储库的抽象类,同时它的操作也很像映射(Map)。给定一个关键字和值,可以将值存储到字典(Dictionary)对象中。一旦这个值被存储了,就能够用它的关键字来检索它。因此,与映射一样,字典可以被当做关键字/值对列表来考虑。尽管在Java 2中并没有摈弃字典(Dictionary),由于它被映射(Map)所取代,从而被认为是过时的。然而由于目前Dictionary被广泛地使用,因此这里仍对它进行详细的讨论。

由Dictionary定义的抽象方法在表15-12中列出。

表15-12 由Dictionary 定义的抽象方法

方法描述

Enumeration elements( ) 返回对包含在字典中的值的枚举Object get(Object key) 返回一个包含与key相连的值的对象。如果key不在字典中,则返回一个空对象

boolean isEmpty( ) 如果字典是空的,则返回true;如果字典中至少包含一个关键字,则返回false

Enumeration keys( ) 返回包含在字典中的关键字的枚举Object put(Object key, Object value) 将一个关键字和它的值插入字典中。如果key已经不在字典中了,则返回null;如果key已经在字典中了,则返回与key相关联的前一个值

续表

方法描述

Object remove(Object key) 删除key和它的值。返回与key相关联的值。如果key不在字典中,则返回null

int size( ) 返回字典中的项数使用put( )方法在字典中增加关键字和值。使用get( )方法检索给定关键字的值。当分别使用keys( )和elements( )方法进行枚举(Enumeration)时,关键字和值可以分别逐个地返回。size( )方法返回存储在字典中的关键字/值对的个数。当字典是空的时候,isEmpty( )返回true.使用remove( )方法可以删除关键字/值对。

注意:Dictionary类是过时的。应该执行Map接口去获得关键字/值存储的功能。

15.10.5 Hashtable

散列表(Hashtable)是原始java.util中的一部分同时也是Dictionary的一个具体实现。然而,Java 2重新设计了散列表(Hashtable)以便它也能实现映射(Map)接口。因此现在Hashtable也被集成到类集框架中。它与HashMap相似,但它是同步的。

和HashMap一样,Hashtable将关键字/值对存储到散列表中。使用Hashtable时,指定一个对象作为关键字,同时指定与该关键字相关联的值。接着该关键字被散列,而把得到的散列值作为存储在表中的值的下标。散列表仅仅可以存储重载由Object定义的hashCode( )和equals( )方法的对象。hashCode( )方法计算和返回对象的散列码。当然,equals( )方法比较两个对象。幸运的是,许多Java内置的类已经实现了hashCode( )方法。例如,大多数常见的Hashtable类型使用字符串(String)对象作为关键字。String实现hashCode( )和equals( )方法。

Hashtable的构造函数如下所示:

Hashtable( )

Hashtable(int size)

Hashtable(int size, float fillRatio)

Hashtable(Map m)

第一种形式是默认的构造函数。第二种形式创建一个散列表,该散列表具有由size指定的原始大小。第三种形式创建一个散列表,该散列表具有由size指定的原始大小和由fillRatio指定的填充比。填充比必须介于0.0和1.0之间,它决定了在散列表向上调整大小之前散列表的充满度。具体地说,当元素的个数大于散列表的容量乘以它的填充比时,散列表被扩展。如果没有指定填充比,默认使用0.75.最后,第四种形式创建一个散列表,该散列表用m中的元素初始化。散列表的容量被设为m中元素的个数的两倍。默认的填充因子设为0.75.第四种构造函数是在Java 2中新增加的。

除了Hashtable目前实现的,由Map接口定义的方法之外,Hashtable定义的从以前版本遗留下来的方法列在表15-13中。

表15-13 由Hashtable 定义的从以前版本遗留下来的方法

方法描述

void clear( ) 复位并清空散列表

Object clone( ) 返回调用对象的复制

boolean contains(Object value) 如果一些值与存在于散列表中的value相等的话,则返回true;如果这个值不存在,则返回false

boolean containsKey(Object key) 如果一些关键字与存在于散列表中的key相等的话,则返回true;如果这个关键字不存在,则返回false

boolean containsValue(Object value) 如果一些值与散列表中存在的value相等的话,返回true;如果这个值没有找到,则返回false(是一种为了保持一致性而在Java2中新增加的非Map方法)

Enumeration elements( ) 返回包含在散列表中的值的枚举

Object get(Object key) 返回包含与key相关联的值的对象。如果key不在散列表中,则返回一个空对象

boolean isEmpty( ) 如果散列表是空的,则返回true;如果散列表中至少包含一个关键字,则返回false

Enumeration keys( ) 返回包含在散列表中的关键字的枚举

Object put(Object key, Object value) 将关键字和值插入散列表中。如果key已经不在散列表中,返回null。如果key已经存在于散列表中,则返回与key相连的前一个值

void rehash( ) 增大散列表的大小并且对其关键字进行再散列。

Object remove(Object key) 删除key及其对应的值。返回与key相关联的值。如果key不在散列表中,则返回一个空对象

int size( ) 返回散列表中的项数

String toString( ) 返回散列表的等价字符串形式

下面的例子重写前面介绍的关于银行账目的程序。在重写的程序中,使用Hashtable储存银行存款人的名字和他们当前的资产平衡表:

// Demonstrate a Hashtable

import java.util.*;

class HTDemo {

public static void main(String args[]) {

Hashtable balance = new Hashtable();

Enumeration names;

String str;

double bal;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有