ホームページ  >  記事  >  Java  >  Java 学習の基礎チュートリアル: Java データ構造

Java 学習の基礎チュートリアル: Java データ構造

php是最好的语言
php是最好的语言オリジナル
2018-08-08 10:16:351567ブラウズ

Java ツールキットは強力なデータ構造を提供します。 Java のデータ構造には主に次のインターフェイスとクラスが含まれます:

  • Enumeration

  • BitSet

  • Vector

  • Stack

  • Dictionary

  • マップインターフェース

  • ハッシュテーブル

  • プロパティ

上記のクラスは、Java2 で導入された伝統的なレガシーです。新しいフレームワークであるコレクション フレームワーク (コレクション) については、後で説明します。


Enumeration

Enumeration インターフェイス自体はデータ構造ではありませんが、他のデータ構造で広く使用されています。 Enumeration インターフェイスは、データ構造から連続した要素を取得する方法を定義します。

たとえば、列挙型は、複数の要素を含むデータ構造の次の要素を取得するために使用される nextElement と呼ばれるメソッドを定義します。

列挙インターフェイスの詳細については、「列挙」を参照してください。

Enumeration インターフェイスは、オブジェクト コレクション内の要素を列挙 (一度に 1 つずつ取得) できるいくつかのメソッドを定義します。

この従来のインターフェイスはイテレーターに置き換えられましたが、列挙は廃止されていませんが、最新のコードではほとんど使用されません。それにもかかわらず、一部の API クラスに加えて、Vector や Properties などの従来のクラスで定義されたメソッドでも使用され、アプリケーションで広く使用されています。 次の表は、Enumeration によって宣言されたいくつかのメソッドをまとめたものです。

方法の説明 この列挙型にさらに要素が含まれているかどうかをテストします。 2 この列挙オブジェクトに利用可能な要素が少なくとも 1 つある場合、この列挙の次の要素を返します。

次の例は列挙の使用法を示しています:

import java.util.Vector;
import java.util.Enumeration;
 
public class EnumerationTester {
 
   public static void main(String args[]) {
      Enumeration<String> days;
      Vector<String> dayNames = new Vector<String>();
      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

ビット セット (BitSet)

Bit Set クラスはビットのセットを実装します。個別に設定およびクリアできるフラグ。

このクラスは、ブール値のセットを扱う場合に非常に便利です。各値に「ビット」を割り当て、そのビットを適切に設定またはクリアしてブール値を操作するだけです。

このクラスの詳細については、「BitSet」を参照してください。

Bitset クラスは、ビット値を保持する特別なタイプの配列を作成します。 BitSet 内の配列のサイズは、必要に応じて増加します。これはビットのベクトルに似ています。

これは伝統的なクラスですが、Java 2 で完全に再設計されました。

BitSet は 2 つの構築メソッドを定義します。

最初のコンストラクターはデフォルトのオブジェクトを作成します:

BitSet()

2 番目のメソッドにより、ユーザーは初期サイズを指定できます。すべてのビットは 0 に初期化されます。

BitSet(int size)

BitSet は、次の表にリストされている Cloneable インターフェイスで定義されたメソッドを実装します。

1 ブール値にはMoreElements( )
オブジェクト nextElement( )
シリアル番号 方法の説明
1 void and(BitSet セット)
このターゲット ビット セットとパラメータ ビット セットに対して論理 AND 演算を実行します。
2 void andNot(BitSet セット)
対応するビットが指定された BitSet に設定されている、この BitSet 内のすべてのビットをクリアします。
3 int カーディナリティ( )
この BitSet 内で true に設定されているビットの数を返します。
4 ボイドクリア( )
この BitSet のすべてのビットを false に設定します。
5 ボイドクリア(intインデックス)
指定されたインデックスのビットを false に設定します。
6 void clear(int startIndex, int endIndex)
指定された fromIndex (両端を含む) から指定された toIndex (両端を含まない) までの範囲内のビットを false に設定します。
7 オブジェクトクローン( )
この BitSet をコピーし、それと等しい新しい BitSet を生成します。
8 ブール値に等しい(オブジェクト bitSet)
このオブジェクトを指定されたオブジェクトと比較します。
9 ボイドフリップ(intインデックス)
指定されたインデックスのビットをその現在の値の補数に設定します。
10 void lip(int startIndex, int endIndex)
指定された fromIndex (両端を含む) から指定された toIndex (両端を含まない) までの範囲内の各ビットを、その現在の値の補数に設定します。
11 ブール型 get(int インデックス)
指定されたインデックスのビット値を返します。
12 BitSet get(int startIndex, int endIndex)
fromIndex (包含) から toIndex (排他) までの範囲のこの BitSet 内のビットで構成される新しい BitSet を返します。
13 int ハッシュコード( )
このビットセットのハッシュ コード値を返します。
14 ブール値の交差(BitSet bitSet)
指定された BitSet に true に設定されたビットがあり、この BitSet でも true に設定されている場合は true を返します。
15 ブール値 isEmpty( )
この BitSet に true に設定されたビットが含まれていない場合は、true を返します。
16 int の長さ( )
この BitSet の「論理サイズ」、つまり BitSet 内の最も高い設定ビットのインデックスに 1 を加えた値を返します。
17 int nextClearBit(int startIndex)
false に設定された最初のビットのインデックスを返します。これは、指定された開始インデックス以降に発生します。
18 int nextSetBit(int startIndex)
true に設定された最初のビットのインデックスを返します。これは、指定された開始インデックス以降に発生します。
19 void or(BitSet bitSet)
このビットセットとビットセット パラメーターに対して論理 OR 演算を実行します。
20 void set(int インデックス)
指定されたインデックスのビットを true に設定します。
21 void set(intindex, boolean v)
指定されたインデックスのビットを指定された値に設定します。
22 void set(int startIndex, int endIndex)
指定された fromIndex (両端を含む) から指定された toIndex (両端を含まない) までの範囲内のビットを true に設定します。
23 void set(int startIndex, int endIndex, boolean v)
指定された fromIndex (両端を含む) から指定された toIndex (両端を含まない) までの範囲内のビットを指定された値に設定します。
24 int サイズ( )
この BitSet がビット値を表すときに実際に使用される空間のビット数を返します。
25 文字列 toString( )
このビットセットの文字列表現を返します。
26 void xor(BitSet bitSet)
このビットセットとビットセット パラメーターに対して論理 XOR 演算を実行します。

实例

下面的程序说明这个数据结构支持的几个方法:

import java.util.BitSet;
 
public class BitSetDemo {
 
  public static void main(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:
{}

向量(Vector)

向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。

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

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

关于该类的更多信息,请参见向量(Vector)

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

  • Vector是同步访问的。

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

Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

Vector类支持4种构造方法。

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

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

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

Vector(int size,int incr)

第四种构造方法创建一个包含集合c元素的向量:

Vector(Collection c)

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

シリアル番号 方法の説明
1 void add(int インデックス, オブジェクト要素)
指定された要素をこのベクトル内の指定された位置に挿入します。
2 ブール値 add(オブジェクト o)
指定された要素をこのベクトルの末尾に追加します。
3 ブール値 addAll(コレクション c)
指定された Collection 内のすべての要素を、指定されたコレクションの反復子によって返された順序でこのベクトルの末尾に追加します。
4 ブール型 addAll(int インデックス, コレクション c)
指定された Collection 内のすべての要素をこのベクトルの指定された位置に挿入します。
5 void addElement(Object obj)
指定されたコンポーネントをこのベクトルの末尾に追加し、サイズを 1 増やします。
6 int 容量()
このベクトルの現在の容量を返します。
7 ボイドクリア()
このベクトルからすべての要素を削除します。
8 オブジェクトクローン()
ベクトルのコピーを返します。
9 ブール値には(オブジェクト要素)が含まれます
このベクトルに指定された要素が含まれている場合は true を返します。
10 ブール値 containsAll(コレクション c)
このベクトルに指定されたコレクション内のすべての要素が含まれている場合は true を返します。
11 void copyInto(Object[] anArray)
このベクトルのコンポーネントを指定された配列にコピーします。
12 オブジェクト要素At(intインデックス)
指定されたインデックスにあるコンポーネントを返します。
13 列挙要素()
このベクトルのコンポーネントの列挙を返します。
14 void ensureCapacity(int minCapacity)
必要に応じて、このベクトルの容量を増やして、最小容量パラメーターで指定されたコンポーネントの数以上を保持できるようにします。
15 ブール値等しい(オブジェクトo)
指定されたオブジェクトとこのベクトルが等しいかどうかを比較します。
16 オブジェクト firstElement()
このベクトルの最初のコンポーネント (インデックス 0 の項目) を返します。
17 オブジェクトget(intインデックス)
ベクトル内の指定された位置にある要素を返します。
18 int ハッシュコード()
このベクトルのハッシュ コード値を返します。
19 int IndexOf(オブジェクト要素)
このベクトル内で指定された要素が最初に出現するインデックスを返します。このベクトルにその要素が含まれていない場合は -1 を返します。
20 int IndexOf(オブジェクト要素, int インデックス)
このベクトル内で指定された要素が最初に出現するインデックスを返します。インデックスから順方向に検索します。要素が見つからない場合は -1 を返します。
21 void insertElementAt(オブジェクト obj, int インデックス)
指定されたオブジェクトをコンポーネントとしてこのベクトルの指定されたインデックスに挿入します。
22 ブール値 isEmpty()
このベクトルにコンポーネントが含まれているかどうかをテストします。
23 オブジェクト lastElement()
このベクトルの最後のコンポーネントを返します。
24 int lastIndexOf(オブジェクト要素)
このベクトル内で指定された要素が最後に出現したインデックスを返します。このベクトルにその要素が含まれていない場合は -1 を返します。
25 int lastIndexOf(オブジェクト要素, int インデックス)
このベクトル内で指定された要素が最後に出現したインデックスを返します。index から逆方向に検索します。要素が見つからない場合は -1 を返します。
26 オブジェクトの削除(intインデックス)
このベクトル内の指定された位置にある要素を削除します。
27 ブール型のremove(オブジェクトo)
このベクトル内の指定された要素の最初の出現を削除し、ベクトルに要素が含まれていない場合は要素を変更しないままにします。
28 ブール値 RemoveAll(コレクション c)
指定されたコレクションに含まれるすべての要素をこのベクトルから削除します。
29 voidremoveAllElements()
このベクトルからすべてのコンポーネントを削除し、そのサイズを 0 に設定します。
30 ブール型のremoveElement(オブジェクトobj)
このベクトルから最初に出現した (インデックスが最も低い) 変数を削除します。
31 voidremoveElementAt(intindex)
指定されたインデックスにあるコンポーネントを削除します。
32 protected void RemoveRange(int fromIndex, int toIndex)
インデックスが fromIndex (両端を含む) と toIndex (両端を除く) の間にあるすべての要素をこの List から削除します。
33 ブール値保持All(コレクションc)
在此向量中仅保留包含在指定 Collection 中的元素。
34 Object set(int index, Object element)
 用指定的元素替换此向量中指定位置处的元素。
35 void setElementAt(Object obj, int index) 
将此向量指定 index 处的组件设置为指定的对象。
36 void setSize(int newSize) 
 设置此向量的大小。
37 int size() 
 返回此向量中的组件数。
38 List subList(int fromIndex, int toIndex) 
返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)。
39 Object[] toArray()
 返回一个数组,包含此向量中以恰当顺序存放的所有元素。
40 Object[] toArray(Object[] a) 
返回一个数组,包含此向量中以恰当顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。
41 String toString() 
返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。
42 void trimToSize() 
  对此向量的容量进行微调,使其等于向量的当前大小。

实例

下面的程序说明这个集合所支持的几种方法:

import java.util.*;

public class VectorDemo {

   public static void main(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

栈(Stack)

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

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

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

关于该类的更多信息,请参见栈(Stack)。

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

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

Stack()

除了由Vector定义的所有方法,自己也定义了一些方法:

序号 方法描述
1 boolean empty() 
测试堆栈是否为空。
2 Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element)
把项压入堆栈顶部。
5 int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

实例

下面的程序说明这个集合所支持的几种方法

实例

import java.util.*;
 
public class StackDemo {
 
    static void showpush(Stack<Integer> st, int a) {
        st.push(new Integer(a));
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }
 
    static void showpop(Stack<Integer> 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<Integer> st = new Stack<Integer>();
        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

字典(Dictionary)

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

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

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

关于该类的更多信息,请参见字典( Dictionary)。

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

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

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

序号 方法描述
1 Enumeration elements( )
返回此 dictionary 中值的枚举。
2 Object get(Object key)
返回此 dictionary 中该键所映射到的值。
3 boolean isEmpty( )
测试此 dictionary 是否不存在从键到值的映射。
4 Enumeration keys( )
返回此 dictionary 中的键的枚举。
5 Object put(Object key, Object value)
将指定 key 映射到此 dictionary 中指定 value。
6 Object remove(Object key)
从此 dictionary 中移除 key (及其相应的 value)。
7 int size( )
返回此 dictionary 中条目(不同键)的数量。

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

Java Map 接口

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

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

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

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

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

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

序号 方法描述
1 void clear( )
 从此映射中移除所有映射关系(可选操作)。
2 boolean containsKey(Object k)
如果此映射包含指定键的映射关系,则返回 true。
3 boolean containsValue(Object v)
如果此映射将一个或多个键映射到指定值,则返回 true。
4 Set entrySet( )
返回此映射中包含的映射关系的 Set 视图。
5 boolean equals(Object obj)
比较指定的对象与此映射是否相等。
6 Object get(Object k)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
7 int hashCode( )
返回此映射的哈希码值。
8 boolean isEmpty( )
如果此映射未包含键-值映射关系,则返回 true。
9 Set keySet( )
返回此映射中包含的键的 Set 视图。
10 Object put(Object k, Object v)
将指定的值与此映射中的指定键关联(可选操作)。
11 void putAll(Map m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
12 Object remove(Object k)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
13 int size( )
返回此映射中的键-值映射关系数。
14 Collection values( )
返回此映射中包含的值的 Collection 视图。

实例

下面的例子来解释Map的功能

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      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}

哈希表(Hashtable)

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

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

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

关于该类的更多信息,请参见哈希表(HashTable)。

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

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

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

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

Hashtable定义了四个构造方法。第一个是默认构造方法:

Hashtable()

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

Hashtable(int size)

第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。

填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度:

Hashtable(int size,float fillRatio)

第四个构造方法创建了一个以M中元素为初始化元素的哈希表。

哈希表的容量被设置为M的两倍。

Hashtable(Map m)

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

序号 方法描述
1 void clear( )
 将此哈希表清空,使其不包含任何键。
2 Object clone( )
创建此哈希表的浅表副本。
3 boolean contains(Object value)
 测试此映射表中是否存在与指定值关联的键。
4 boolean containsKey(Object key)
测试指定对象是否为此哈希表中的键。
5 boolean containsValue(Object value)
如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
6 Enumeration elements( )
返回此哈希表中的值的枚举。
7 Object get(Object key)
 返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。
8 boolean isEmpty( )
测试此哈希表是否没有键映射到值。
9 Enumeration keys( )
 返回此哈希表中的键的枚举。
10 Object put(Object key, Object value)
将指定 key 映射到此哈希表中的指定 value。
11 void rehash( )
增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
12 Object remove(Object key)
从哈希表中移除该键及其相应的值。
13 int size( )
 返回此哈希表中的键的数量。
14 String toString( )
返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。

实例

下面的程序说明这个数据结构支持的几个方法:

import java.util.*;

public class HashTableDemo {

   public static void main(String args[]) {
      // Create a hash map
      Hashtable balance = new Hashtable();
      Enumeration names;
      String str;
      double bal;

      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&#39;s account
      bal = ((Double)balance.get("Zara")).doubleValue();
      balance.put("Zara", new Double(bal+1000));
      System.out.println("Zara&#39;s new balance: " +
      balance.get("Zara"));
   }
}

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

Qadir: -19.08
Zara: 3434.34
Mahnaz: 123.22
Daisy: 99.22
Ayan: 1378.0

Zara&#39;s new balance: 4434.34

属性(Properties)

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

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

关于该类的更多信息,请参见属性(Properties)。

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

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

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

Properties defaults;

Properties类定义了两个构造方法. 第一个构造方法没有默认值。

Properties()

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

Properties(Properties propDefault)

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

序号 方法描述
1 String getProperty(String key)
 用指定的键在此属性列表中搜索属性。
2 String getProperty(String key, String defaultProperty)
用指定的键在属性列表中搜索属性。
3 void list(PrintStream streamOut)
 将属性列表输出到指定的输出流。
4 void list(PrintWriter streamOut)
将属性列表输出到指定的输出流。
5 void load(InputStream streamIn) throws IOException
 从输入流中读取属性列表(键和元素对)。
6 Enumeration propertyNames( )
按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
7 Object setProperty(String key, String value)
 调用 Hashtable 的方法 put。
8 void store(OutputStream streamOut, String description)
 以适合使用  load(InputStream)方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。

实例

下面的程序说明这个数据结构支持的几个方法:

实例

import java.util.*;
 
public class PropDemo {
 
   public static void main(String args[]) {
      Properties capitals = new Properties();
      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.

相关推荐:

java基础知识小小结

重拾java基础(十五):数据结构总结

以上がJava 学習の基礎チュートリアル: Java データ構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。