学java 数据结构_Java 学习(15):Java 数据结构

Java 数据结构

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:

枚举(Enumeration)

位集合(BitSet)

向量(Vector)

栈(Stack)

字典(Dictionary)

哈希表(Hashtable)

属性(Properties)

以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。

枚举(Enumeration)

枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。

枚举(The Enumeration)接口 定义了一种 从数据结构中取回连续元素的方式。

枚举接口:

Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。

这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。

下列是一些 Enumeration 声明的方法:

boolean hasMoreElements( ): 测试此枚举是否包含更多的元素。

Object nextElement( ):如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.Vector;

import java.util.Enumeration;public classEnumerationTester {public static voidmain(String args[]) {

Enumeration days;

Vector dayNames= newVector();

dayNames.add("Sunday");

dayNames.add("Monday");

dayNames.add("Tuesday");

dayNames.add("Wednesday");

dayNames.add("Thursday");

dayNames.add("Friday");

dayNames.add("Saturday");

days=dayNames.elements();while(days.hasMoreElements()){

System.out.println(days.nextElement());

}

}

}/*以上运行结果:

Sunday

Monday

Tuesday

Wednesday

Thursday

Friday

Saturday*/

Enumeration 使用 实例

位集合(BitSet)

位集合类实现了一组可以单独设置和清除的位或标志。

应用: 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。

一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。这和位向量(vector of bits)比较类似。

这是一个传统的类,但它在Java 2 中被完全重新设计。

BitSet 定义了两个构造方法:

第一个构造方法创建一个默认的对象:BitSet()

第二个方法允许用户指定初始大小。所有位初始化为0:BitSet(int size)

BitSet中实现了Cloneable接口中定义的方法如下表所列:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 void and(BitSet set)

对此目标位set 和参数位 set执行逻辑与操作。2 void andNot(BitSet set)

清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。3 intcardinality( )

返回此 BitSet 中设置为true的位数。4 voidclear( )

将此 BitSet 中的所有位设置为false。5 void clear(intindex)

将索引指定处的位设置为false。6 void clear(int startIndex, intendIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为false。7Object clone( )

复制此 BitSet,生成一个与之相等的新 BitSet。8boolean equals(Object bitSet)

将此对象与指定的对象进行比较。9 void flip(intindex)

将指定索引处的位设置为其当前值的补码。10 void flip(int startIndex, intendIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。11 boolean get(intindex)

返回指定索引处的位值。12 BitSet get(int startIndex, intendIndex)

返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。13 inthashCode( )

返回此位set的哈希码值。14boolean intersects(BitSet bitSet)

如果指定的 BitSet 中有设置为true 的位,并且在此 BitSet 中也将其设置为 true,则返回 ture。15boolean isEmpty( )

如果此 BitSet 中没有包含任何设置为true的位,则返回 ture。16 intlength( )

返回此 BitSet 的"逻辑大小":BitSet 中最高设置位的索引加 1。17 int nextClearBit(intstartIndex)

返回第一个设置为false的位的索引,这发生在指定的起始索引或之后的索引上。18 int nextSetBit(intstartIndex)

返回第一个设置为true的位的索引,这发生在指定的起始索引或之后的索引上。19 voidor(BitSet bitSet)

对此位set 和位 set参数执行逻辑或操作。20 void set(intindex)

将指定索引处的位设置为true。21 void set(intindex, boolean v)

将指定索引处的位设置为指定的值。22 void set(int startIndex, intendIndex)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为true。23 void set(int startIndex, intendIndex, boolean v)

将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。24 intsize( )

返回此 BitSet 表示位值时实际使用空间的位数。25String toString( )

返回此位set的字符串表示形式。26 voidxor(BitSet bitSet)

对此位set 和位 set 参数执行逻辑异或操作。

BitSet中实现了Cloneable接口中定义的方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.BitSet;public classBitSetDemo {public static voidmain(String args[]) {

BitSet bits1= new BitSet(16);

BitSet bits2= new BitSet(16);//set some bits

for(int i=0; i<16; i++) {if((i%2) == 0) bits1.set(i);if((i%5) != 0) bits2.set(i);

}

System.out.println("Initial pattern in bits1:");

System.out.println(bits1);

System.out.println("\nInitial pattern in bits2:");

System.out.println(bits2);//AND bits

bits2.and(bits1);

System.out.println("\nbits2 AND bits1:");

System.out.println(bits2);//OR bits

bits2.or(bits1);

System.out.println("\nbits2 OR bits1:");

System.out.println(bits2);//XOR bits

bits2.xor(bits1);

System.out.println("\nbits2 XOR bits1:");

System.out.println(bits2);

}

}/*编译运行结果:

Initial pattern in bits1:

{0, 2, 4, 6, 8, 10, 12, 14}

Initial pattern in bits2:

{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}

bits2 AND bits1:

{2, 4, 6, 8, 12, 14}

bits2 OR bits1:

{0, 2, 4, 6, 8, 10, 12, 14}

bits2 XOR bits1:

{}*/

BitSet 支持的几个方法 实例

向量(Vector)

向量(Vector)类和传统数组非常相似,但是Vector主要用于事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

和数组一样,Vector对象的元素也能通过索引访问。

使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。

Vector类实现了一个动态数组。和 ArrayList 相似,但是两者是不同的:

Vector是同步访问的。

Vector包含了许多传统的方法,这些方法不属于集合框架。

Vector类支持4种构造方法:

第一种构造方法创建一个默认的向量,默认大小为10:Vector()

第二种构造方法创建指定大小的向量:Vector(intsize)

第三种构造方法创建指定大小的向量,并且增量用 incr 指定. 增量表示向量每次增加的元素数目:Vector(intsize,intincr)

第四中构造方法创建一个包含集合c元素的向量:Vector(Collectionc)

除了从父类继承的方法外Vector还定义了以下方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 void add(intindex, Object element)

在此向量的指定位置插入指定的元素。2boolean add(Object o)

将指定元素添加到此向量的末尾。3boolean addAll(Collection c)

将指定 Collection 中的所有元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的顺序添加这些元素。4 boolean addAll(intindex, Collection c)

在指定位置将指定 Collection 中的所有元素插入到此向量中。5 voidaddElement(Object obj)

将指定的组件添加到此向量的末尾,将其大小增加1。6 intcapacity()

返回此向量的当前容量。7 voidclear()

从此向量中移除所有元素。8Object clone()

返回向量的一个副本。9boolean contains(Object elem)

如果此向量包含指定的元素,则返回true。10boolean containsAll(Collection c)

如果此向量包含指定 Collection 中的所有元素,则返回true。11 voidcopyInto(Object[] anArray)

将此向量的组件复制到指定的数组中。12 Object elementAt(intindex)

返回指定索引处的组件。13Enumeration elements()

返回此向量的组件的枚举。14 void ensureCapacity(intminCapacity)

增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的组件数。15boolean equals(Object o)

比较指定对象与此向量的相等性。16Object firstElement()

返回此向量的第一个组件(位于索引0) 处的项)。17 Object get(intindex)

返回向量中指定位置的元素。18 inthashCode()

返回此向量的哈希码值。19 intindexOf(Object elem)

返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回-1。20 int indexOf(Object elem, intindex)

返回此向量中第一次出现的指定元素的索引,从 index 处正向搜索,如果未找到该元素,则返回-1。21 void insertElementAt(Object obj, intindex)

将指定对象作为此向量中的组件插入到指定的 index 处。22boolean isEmpty()

测试此向量是否不包含组件。23Object lastElement()

返回此向量的最后一个组件。24 intlastIndexOf(Object elem)

返回此向量中最后一次出现的指定元素的索引;如果此向量不包含该元素,则返回-1。25 int lastIndexOf(Object elem, intindex)

返回此向量中最后一次出现的指定元素的索引,从 index 处逆向搜索,如果未找到该元素,则返回-1。26 Object remove(intindex)

移除此向量中指定位置的元素。27boolean remove(Object o)

移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。28boolean removeAll(Collection c)

从此向量中移除包含在指定 Collection 中的所有元素。29 voidremoveAllElements()

从此向量中移除全部组件,并将其大小设置为零。30boolean removeElement(Object obj)

从此向量中移除变量的第一个(索引最小的)匹配项。31 void removeElementAt(intindex)

删除指定索引处的组件。32 protected void removeRange(int fromIndex, inttoIndex)

从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。33boolean retainAll(Collection c)

在此向量中仅保留包含在指定 Collection 中的元素。34 Object set(intindex, Object element)

用指定的元素替换此向量中指定位置处的元素。35 void setElementAt(Object obj, intindex)

将此向量指定 index 处的组件设置为指定的对象。36 void setSize(intnewSize)

设置此向量的大小。37 intsize()

返回此向量中的组件数。38 List subList(int fromIndex, inttoIndex)

返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)。39Object[] toArray()

返回一个数组,包含此向量中以恰当顺序存放的所有元素。40Object[] toArray(Object[] a)

返回一个数组,包含此向量中以恰当顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。41String toString()

返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。42 voidtrimToSize()

对此向量的容量进行微调,使其等于向量的当前大小。

Vector 除继承之外的方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;public classVectorDemo {public static voidmain(String args[]) {//initial size is 3, increment is 2

Vector v = new Vector(3, 2);

System.out.println("Initial size:" +v.size());

System.out.println("Initial capacity:" +v.capacity());

v.addElement(new Integer(1));

v.addElement(new Integer(2));

v.addElement(new Integer(3));

v.addElement(new Integer(4));

System.out.println("Capacity after four additions:" +v.capacity());

v.addElement(new Double(5.45));

System.out.println("Current capacity:" +v.capacity());

v.addElement(new Double(6.08));

v.addElement(new Integer(7));

System.out.println("Current capacity:" +v.capacity());

v.addElement(new Float(9.4));

v.addElement(new Integer(10));

System.out.println("Current capacity:" +v.capacity());

v.addElement(new Integer(11));

v.addElement(new Integer(12));

System.out.println("First element:" +(Integer)v.firstElement());

System.out.println("Last element:" +(Integer)v.lastElement());if(v.contains(new Integer(3)))

System.out.println("Vector contains 3.");//enumerate the elements in the vector.

Enumeration vEnum =v.elements();

System.out.println("\nElements in vector:");while(vEnum.hasMoreElements())

System.out.print(vEnum.nextElement() + " ");

System.out.println();

}

}/*以上实例编译运行结果如下:

Initial size: 0

Initial capacity: 3

Capacity after four additions: 5

Current capacity: 5

Current capacity: 7

Current capacity: 9

First element: 1

Last element: 12

Vector contains 3.

Elements in vector:

1 2 3 4 5.45 6.08 7 9.4 10 11 12*/

Vector 集合所支持的几种方法 实例

栈(Stack)

栈(Stack)实现了一个后进先出(LIFO)的数据结构。

你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。

当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。

栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈。

堆栈只定义了默认构造函数: Stack(),用来创建一个空栈。 堆栈除了包括由 Vector 定义的所有方法,也定义了自己的一些方法。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1boolean empty()

测试堆栈是否为空。2Object peek( )

查看堆栈顶部的对象,但不从堆栈中移除它。3Object pop( )

移除堆栈顶部的对象,并作为此函数的值返回该对象。4Object push(Object element)

把项压入堆栈顶部。5 intsearch(Object element)

返回对象在堆栈中的位置,以1 为基数。

Vector定义之外的方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;public classStackDemo {static void showpush(Stack st, inta) {

st.push(newInteger(a));

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

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

}static voidshowpop(Stack st) {

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

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

System.out.println(a);

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

}public static voidmain(String args[]) {

Stack st= newStack();

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");

}

}

}/*以上实例编译运行结果如下:

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*/

Stack 集合所支持的几种方法 实例

字典(Dictionary)

字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。

当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用 Dictionary。

由于 Dictionary类 是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。

Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。

Dictionary定义的抽象方法如下表所示:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1Enumeration elements( )

返回此 dictionary 中值的枚举。2 Object get(Object key)

返回此 dictionary 中该键所映射到的值。3boolean isEmpty( )

测试此 dictionary 是否不存在从键到值的映射。4Enumeration keys( )

返回此 dictionary 中的键的枚举。5Object put(Object key, Object value)

将指定 key 映射到此 dictionary 中指定 value。6Object remove(Object key)

从此 dictionary 中移除 key (及其相应的 value)。7 intsize( )

返回此 dictionary 中条目(不同键)的数量。

Dictionary定义的抽象方法

Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。

Map接口(HashMap)中键和值一一映射. 可以通过键来获取值。

给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。

当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.

当对象的类型 和 Map 里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。

当在不允许使用 Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。

当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 voidclear( )

从此映射中移除所有映射关系(可选操作)。2boolean containsKey(Object k)

如果此映射包含指定键的映射关系,则返回true。3boolean containsValue(Object v)

如果此映射将一个或多个键映射到指定值,则返回true。4Set entrySet( )

返回此映射中包含的映射关系的 Set 视图。5boolean equals(Object obj)

比较指定的对象与此映射是否相等。6 Object get(Object k)

返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。7 inthashCode( )

返回此映射的哈希码值。8boolean isEmpty( )

如果此映射未包含键-值映射关系,则返回 true。9Set keySet( )

返回此映射中包含的键的 Set 视图。10Object put(Object k, Object v)

将指定的值与此映射中的指定键关联(可选操作)。11 voidputAll(Map m)

从指定映射中将所有映射关系复制到此映射中(可选操作)。12Object remove(Object k)

如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。13 intsize( )

返回此映射中的键-值映射关系数。14Collection values( )

返回此映射中包含的值的 Collection 视图。

Map接口 方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;public classCollectionsDemo {public static voidmain(String[] args) {

Map m1= newHashMap();

m1.put("Zara", "8");

m1.put("Mahnaz", "31");

m1.put("Ayan", "12");

m1.put("Daisy", "14");

System.out.println();

System.out.println("Map Elements");

System.out.print("\t" +m1);

}

}/*以上实例编译运行结果如下:

Map Elements

{Mahnaz=31, Ayan=12, Daisy=14, Zara=8}*/

Map 功能 实例

哈希表(Hashtable)

Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。

例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。

哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。

Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。

然而,Java 2 重构的 Hashtable 实现了Map接口,因此,Hashtable 现在集成到了集合框架中。它和 HashMap 类很相似,但是它支持同步。

像HashMap一样,Hashtable 在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。

然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

Hashtable定义了四个构造方法:

第一个是默认构造方法:Hashtable()

第二个构造函数创建指定大小的哈希表:Hashtable(intsize)

第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度:Hashtable(intsize,floatfillRatio)

第四个构造方法创建了一个以M中元素为初始化元素的哈希表。哈希表的容量被设置为M的两倍: Hashtable(Mapm)

Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 voidclear( )

将此哈希表清空,使其不包含任何键。2Object clone( )

创建此哈希表的浅表副本。3boolean contains(Object value)

测试此映射表中是否存在与指定值关联的键。4boolean containsKey(Object key)

测试指定对象是否为此哈希表中的键。5boolean containsValue(Object value)

如果此 Hashtable 将一个或多个键映射到此值,则返回true。6Enumeration elements( )

返回此哈希表中的值的枚举。7 Object get(Object key)

返回指定键所映射到的值,如果此映射不包含此键的映射,则返回null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。8boolean isEmpty( )

测试此哈希表是否没有键映射到值。9Enumeration keys( )

返回此哈希表中的键的枚举。10Object put(Object key, Object value)

将指定 key 映射到此哈希表中的指定 value。11 voidrehash( )

增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。12Object remove(Object key)

从哈希表中移除该键及其相应的值。13 intsize( )

返回此哈希表中的键的数量。14String toString( )

返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符"," (逗号加空格)分隔开的、括在括号中的一组条目。

Hashtable 其他方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;public classHashTableDemo {public static voidmain(String args[]) {//Create a hash map

Hashtable balance = newHashtable();

Enumeration names;

String str;doublebal;

balance.put("Zara", new Double(3434.34));

balance.put("Mahnaz", new Double(123.22));

balance.put("Ayan", new Double(1378.00));

balance.put("Daisy", new Double(99.22));

balance.put("Qadir", new Double(-19.08));//Show all balances in hash table.

names =balance.keys();while(names.hasMoreElements()) {

str=(String) names.nextElement();

System.out.println(str + ":" +balance.get(str));

}

System.out.println();//Deposit 1,000 into Zara's account

bal = ((Double)balance.get("Zara")).doubleValue();

balance.put("Zara", new Double(bal+1000));

System.out.println("Zara's new balance:" +balance.get("Zara"));

}

}/*以上实例编译运行结果如下:

Qadir: -19.08

Zara: 3434.34

Mahnaz: 123.22

Daisy: 99.22

Ayan: 1378.0

Zara's new balance: 4434.34*/

Hashtable 数据结构支持的几个方法 实例

HashMap 与 HashTable 区别:

HashMap 不是线程安全的: hastmap 是一个接口 是 map 接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap 允许null key 和 null value,而 hashtable不允许。

HashTable 是线程安全的一个Collection。

HashMap 是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

属性(Properties)

Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

Properties 定义如下实例变量.这个变量持有一个Properties对象相关的默认属性列表。

Properties defaults;

Properties类定义了两个构造方法:

第一个构造方法没有默认值: Properties()

第二个构造方法使用 propDefault 作为默认值。两种情况下,属性列表都为空:Properties(PropertiespropDefault)

除了从Hashtable中所定义的方法,Properties定义了以下方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1String getProperty(String key)

用指定的键在此属性列表中搜索属性。2String getProperty(String key, String defaultProperty)

用指定的键在属性列表中搜索属性。3 voidlist(PrintStream streamOut)

将属性列表输出到指定的输出流。4 voidlist(PrintWriter streamOut)

将属性列表输出到指定的输出流。5 voidload(InputStream streamIn) throws IOException

从输入流中读取属性列表(键和元素对)。6Enumeration propertyNames( )

按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。7Object setProperty(String key, String value)

调用 Hashtable 的方法 put。8 voidstore(OutputStream streamOut, String description)

以适合使用 load(InputStream)方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。

Properties定义其他方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

import java.util.*;public classPropDemo {public static voidmain(String args[]) {

Properties capitals= newProperties();

Set states;

String str;

capitals.put("Illinois", "Springfield");

capitals.put("Missouri", "Jefferson City");

capitals.put("Washington", "Olympia");

capitals.put("California", "Sacramento");

capitals.put("Indiana", "Indianapolis");//Show all states and capitals in hashtable.

states = capitals.keySet(); //get set-view of keys

Iterator itr =states.iterator();while(itr.hasNext()) {

str=(String) itr.next();

System.out.println("The capital of" +str+ "is" + capitals.getProperty(str) + ".");

}

System.out.println();//look for state not in list -- specify default

str = capitals.getProperty("Florida", "Not Found");

System.out.println("The capital of Florida is"

+ str + ".");

}

}/*以上实例编译运行结果如下:

The capital of Missouri is Jefferson City.

The capital of Illinois is Springfield.

The capital of Indiana is Indianapolis.

The capital of California is Sacramento.

The capital of Washington is Olympia.

The capital of Florida is Not Found.*/

Properties数据结构支持的几个方法 实例

迭代器 iterator 用法

Java 中的 Iterator 功能比较简单,并且只能单向移动:

(1) 使用方法 iterator() 要求容器返回一个 Iterator。第一次调用 Iterator 的 next() 方法时,它返回序列的第一个元素。注意:iterator() 方法是 java.lang.Iterable 接口,被 Collection 继承。

(2) 使用 next() 获得序列中的下一个元素。

(3) 使用 hasNext() 检查序列中是否还有元素。

(4) 使用 remove() 将迭代器新返回的元素删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值