java学习之数据结构

Java数据结构类型

Java数据结构包括Enumeration、BitSet、Vector、Stack、Dictionary、

Hashtable、Properties以及java2中引入的Collection共八种类型,

八种类型中包含了接口和类。

该八种类型分别对映:

枚举、位集合、向量、栈、字典、哈希表、属性以及框架-集合框架。

枚举(Enumeration)

其本质上为一个接口,其中定义了一些方法,通过这些方法可以枚举一个对象集合中的所有元素。已逐渐被迭代器所取代,在传统的一些方法中还保留该类型。

其主要方法有:

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

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

演示如下:

输出为:

 

注意事项:

Enumeration为接口类,其包括三个方法,nextElem返回值为泛型,其余两个方法中,有一个默认方法。

Enumeration中的默认方法为asIterator,其返回值为Iterator,特别注意的是,返回的元素是未遍历的元素集合,若元素在调用该方法时已经遍历结束,那么Iterator迭代器之中的元素集合为空。

位集合(BitSet)

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

位集合实现了Cloneable接口的方法。

其构造方式有两种,一种为不含参数的默认方法,另一种为含有整数值参数的构造方法,该整数值是为集合分配的初始大小,并且所有位初始化为0。

在第二种方式中,初始化的集合大小,其为64的整数倍,若设置的大小不是64的整数倍,则大小为大于设置大小的64的整数倍。

void and(BitSet set):位集合的与运算。

将两个bitset类型的位集合每一位进行与运算,只保留两个集合中都存在的数值。若集合中有某个参数与set位集合中不同,则清除。

void andNot(BitSet set):将存在与该集合中的数值都消除,只保留不相交的部分。

在bitset位集合中,空值则表示位false,若有数值存在,则真值为true,其余方法还有:

boolean equals(Object bitSet):将此对象与指定的对象进行比较。

void flip(int index):将指定索引处的位设置为其当前值的补码。

void flip(int startIndex, int endIndex):将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。

boolean get(int index):返回指定索引处的位值。

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

void or(BitSet bitSet):对此位 set 和位 set 参数执行逻辑或操作。

void xor(BitSet bitSet):对此位 set 和位 set 参数执行逻辑异或操作。

代码演示如下:

输出为:

 

向量(vector)

Vector为一个类,其使用与数组极为相似,可通过下标进行索引。

其优势为创建对象时不需要设置大小,可根据需要,大小动态变化。

Vector具有同步访问的特点,包含许多传统的方法。

其一般用于事先不知道数组的大小,或者只需要一个可以改变大小的数组的情景即可。

Vector类有四种构造方法,分别为:

  1. 无参构造(Vector()):默认的大小为10;
  2. 含有一个参数(Vector(int size)):创建指定大小的向量;
  3. 含有两个参数(Vector(int size,int incr)):创建指定大小的向量,同时设置一个增量值,使向量每次以incr的大小增加空间。
  4. 包含集合的构造(Vector(Collection c)):创建一个包含集合c元素的向量。

Vector常用的方法有:

Void add(object c):将元素c添加到向量中。

Void add(int index,object element):在指定位置,添加元素。

Boolean addAll(collection c):将集合c中的所有元素,按照迭代器返回的顺序,添加到此向量的末尾。

void addElement(Object obj) :将指定的组件添加到此向量的末尾,将其大小增加 1。

int capacity() :返回此向量的当前容量。

void clear() :从此向量中移除所有元素。

Object clone() :返回向量的一个副本。

boolean contains(Object elem) :如果此向量包含指定的元素,则返回 true。

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

void copyInto(Object[] anArray) :将此向量的组件复制到指定的数组中。

Object elementAt(int index) :返回指定索引处的组件。

Enumeration elements() :返回此向量的组件的枚举。

void ensureCapacity(int minCapacity) :增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的组件数。

boolean equals(Object o) :比较指定对象与此向量的相等性。

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

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

void insertElementAt(Object obj, int index) :将指定对象作为此向量中的组件插入到指定的 index 处。

Object lastElement() :返回此向量的最后一个组件。

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

Object remove(int index) : 移除此向量中指定位置的元素。

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

boolean removeAll(Collection c) :从此向量中移除包含在指定 Collection 中的所有元素。

部分方法演示如下:

输出结果为:

 

栈(stack)

栈实现了栈内元素先进后出,后进先出的顺序。

栈类似于对象垂直放置的数组。

Stack继承了vector类,是vector类的一个子类,故stack具有vector类的所有方法,

同时,stack类还定义了自己的一些方法。

Stack只有一个默认的无参构造方法,其实质是系统的储存器为所创建的对象分配一个堆栈。

其自定义的主要方法如下:

boolean empty() :测试堆栈是否为空。

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

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

Object push(Object element):把项压入堆栈顶部。

int search(Object element):返回对象在堆栈中的位置,以 1 为基数。

实际演示如下:

输出结果如下:

 

字典类(dictionary)

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

字典类实际已经不符合需求而被Map所取代。

字典类中定义的抽象方法如下:

Enumeration elements( ):返回此 dictionary 中值的枚举。

Object get(Object key):返回此 dictionary 中该键所映射到的值。

boolean isEmpty( ):测试此 dictionary 是否不存在从键到值的映射。

Enumeration keys( ):返回此 dictionary 中的键的枚举。

Object put(Object key, Object value):将指定 key 映射到此 dictionary 中指定 value。

Object remove(Object key):从此 dictionary 中移除 key (及其相应的 value)。

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

注意:

Hashtable<K,V>类继承了dictionary类,并且实现了Map<K,V>, Cloneable, java.io.Serializable三个接口。

实际演示如下:

输出为:

 

哈希表(Hashtable)

Hashtable是原始java.util的一部分,其是dictionary类的具体实现。

Java2中实现了Map接口,现在被加入到集合框架之中,和hashmap类很相似,但是他支持同步。(哈希表的键是经过哈希函数变换后得到的散列码)

其构造方式有四种,分别为:

1.无参构造:Hashtable()

2.初始化哈希表的大小:Hashtable(int size);

3.初始化哈希表的大小,并且使用fillRation填充指定比例,填充比例介于0.0-1.0之间:Hashtable(int size,float fillRation);

4.使用map集合中的元素作为初始元素构造哈希表:Hashtable(Map M)。

其方法的部分演示如下:

输出结果为:

 

其余方法有:

Enumeration elements( ):返回此哈希表中的值的枚举。

boolean isEmpty( ):测试此哈希表是否没有键映射到值。

Enumeration keys( ):返回此哈希表中的键的枚举。

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

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

Object clone( ):创建此哈希表的浅表副本。

属性(Properties)

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

Properties默认拥有一个实例变量:Properties defaults;该对象为默认持有一个属性列表。

其有两种构造方法:

  1. 无参构造:Properties();
  2. 设置默认值的构造方法:Properties(Properties propDefault)。

两种构造方法属性列表都为空。

Properties继承于hashtable,故拥有所有hashtable所定义的方法。除此之外

其余一些方法有:

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

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

void list(PrintStream streamOut):将属性列表输出到指定的输出流。

void list(PrintWriter streamOut):将属性列表输出到指定的输出流。

PrintWriter,与PrintStream相似,实现了PrintStream中的所有 print 方法。PrintStream打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter类。

void load(InputStream streamIn) throws IOException:从输入流中读取属性列表(键和元素对)。

Enumeration propertyNames( ):按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)

Object setProperty(String key, String value):调用 Hashtable 的方法 put。

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

实际代码演示如下:

输出结果为:

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值