java入门 您所在的位置:网站首页 字典属于哪种数据结构形式 java入门

java入门

2024-06-25 23:32| 来源: 网络整理| 查看: 265

    我们再来看关于java数据结构的最后三个字典(Dictionary)&哈希表(Hashtable)&属性(Properties)。首先是字典(Dictionary)。字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。

    Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。Dictionary定义的抽象方法如下表所示:

序号方法描述1Enumeration elements( )返回此 dictionary 中值的枚举。2Object 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)。7int size( )返回此 dictionary 中条目(不同键)的数量。

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

给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。     序号方法描述1void clear( ) 从此映射中移除所有映射关系(可选操作)。2boolean containsKey(Object k)如果此映射包含指定键的映射关系,则返回 true。3boolean containsValue(Object v)如果此映射将一个或多个键映射到指定值,则返回 true。4Set entrySet( )返回此映射中包含的映射关系的 Set 视图。5boolean equals(Object obj)比较指定的对象与此映射是否相等。6Object get(Object k)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。7int hashCode( )返回此映射的哈希码值。8boolean isEmpty( )如果此映射未包含键-值映射关系,则返回 true。9Set keySet( )返回此映射中包含的键的 Set 视图。10Object put(Object k, Object v)将指定的值与此映射中的指定键关联(可选操作)。11void putAll(Map m)从指定映射中将所有映射关系复制到此映射中(可选操作)。12Object remove(Object k)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。13int size( )返回此映射中的键-值映射关系数。14Collection 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是原始的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接口中定义的方法外,还定义了以下方法:

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

    最后就是属性(Properties)。Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

    Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。Properties 定义如下实例变量.这个变量持有一个Properties对象相关的默认属性列表。

Properties defaults;

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

Properties()

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

Properties(Properties propDefault)

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

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

    再来拓展下迭代器 iterator 用法咱们就结束了啊。Java 中的 Iterator 功能比较简单,并且只能单向移动:

(1) 使用方法 iterator() 要求容器返回一个 Iterator。第一次调用 Iterator 的 next() 方法时,它返回序列的第一个元素。注意:iterator() 方法是 java.lang.Iterable 接口,被 Collection 继承。(2) 使用 next() 获得序列中的下一个元素。(3) 使用 hasNext() 检查序列中是否还有元素。(4) 使用 remove() 将迭代器新返回的元素删除。    好啦,到这里关于数据结构就记录完毕了。如果感觉不错的话,请多多点赞支持哦。。。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有