Java数据结构

Java工具包中包含许多强大的数据结构,主要包括

枚举(Enumeration);

位集合(BitSet);

向量(Vector);

栈(Stack);

字典(Dictionary);

哈希表(Hashtable);

属性(Properties);

下面是详细的叙述和实例:

1、枚举(Enumeration);

    枚举的定义是从其它数据结构中取出连续元素,而它本身并不是一种数据结构,现在已经基本上被迭代器所取代,但在某些方面仍有使用,如应用在Vector和Properties等少数传统类中,另外还有一些API类,以及应用程序中,下面以枚举在Vector中的应用为例:

import java.util.Enumeration;

import java.util.Vector;

//从Vector中取出连续元素

public class EnumerationTest {

public EnumerationTest(){

Enumeration days;                                            //申明枚举对象days

Vector daysNames =new Vector<>();              //申明一个Vector,存放元素               

daysNames.add("Java");                                //向Vector中存放元素

daysNames.add("数");

daysNames.add("据");

daysNames.add("结");

daysNames.add("构");

days = daysNames.elements();

while (days.hasMoreElements()){                    //hasMoreElements()方法用于测试此枚举是否包含更多元素

System.out.println(days.nextElement());        //nextElement()方法测试此枚举是否存在下一个元素,若存在返回此枚举的下一个元素,否则结束

}

}

}

测试成功输出控制台显示如下信息:

2、位集合(BitSet);

    位集合类实现了一组可以单独设置和清除的位或标志。                                                                                该类在处理一组布尔值时比较高效,只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。位集合实际上类似于数学中的集合,然后对集合进行操作,相关操作有:                  void set(int index) 设置index所在的布尔值为true;                                                                                          void clear(int index)设置index所在的布尔值为false;                                                                                      void and(BitSet set)执行逻辑与操作                                                                                                                void or(BitSet bitSet)执行逻辑或操作。                                                                                                            void xor(BitSet bitSet)执行逻辑异或操作。                                                                                                      下面是Java代码实例

import java.util.BitSet;

//Java数据结构-位运算

public class BitSetTest {

public BitSetTest(){

BitSet bit1 =new BitSet(10);

BitSet bit2 =new BitSet(10);

for(int i=0;i<10;i++){

if(i%2==0) bit1.set(i);

if(i%3==0) bit2.set(i);

}

System.out.println("bit1中的元素有"+bit1);

System.out.println("bit2中的元素有"+bit2);

bit1.and(bit2);                                                    //逻辑与运算

System.out.println("bit1和bit2进行与运算的结果为"+bit1);

System.out.println("--------------------------------------------------");

System.out.println("bit1中的元素有"+bit1);

System.out.println("bit2中的元素有"+bit2);

bit1.or(bit2);                                                      //逻辑或运算

System.out.println("bit1和bit2进行或运算的结果为"+bit2);

System.out.println("--------------------------------------------------");

System.out.println("bit1中的元素有"+bit1);

System.out.println("bit2中的元素有"+bit2);

bit1.xor(bit2);                                                    //逻辑异或运算

System.out.println("bit1和bit2进行异或运算的结果为"+bit1);

}

}

测试成功输出控制台显示如下信息:

3、向量(Vector);

    Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者不同,Vector 包含了许多不属于集合框架的传统方法,Vector 主要用于不确定数组的大小,或者说是一个可以改变大小的数组的情况。相关操作有

    void addElement(Object obj) 将指定的组件添加到此向量的末尾,将其大小增加 1。                                      int capacity() 返回此向量的当前容量。                                                                                                            int size() 返回此向量中的组件数。                                                                                                                    Object firstElement() 返回此向量的第一个组件(位于索引 0)处的项)。                                                        Object lastElement() 返回此向量的最后一个组件。                                                                                          boolean contains(Collection c) 如果此向量包含指定 Collection 中的所有元素,则返回 true。                        下面是Java代码实例

import java.util.Enumeration;

import java.util.Vector;

//Java数据结构-向量(Vector)

public class VectorTest {

public VectorTest(){

Vector v =new Vector(2,2);                                          //申明Vector对象,设置初始容量为2,增量为2

Enumeration num;//申明枚举对象num

System.out.println("向量中组件数量为:"+v.size());      //返回向量中组件数量

System.out.println("向量初始容量为:"+v.capacity());  //返回向量容量

System.out.println("-------------------------------------------");

v.addElement(new Integer(1));                                    //往向量中增加组件

v.addElement(new Integer(2));

v.addElement(new Double(1.52));                              //添加组件超过初始容量,自动增加2

//v.addElement(new String("java"));

System.out.println("增加向量组件后向量的组件数量为:"+v.size());        //返回增加组件后的向量的组件数量

System.out.println("增加向量组件后向量的容量为:"+v.capacity());        //返回增加组件后的向量的容量大小

System.out.println("-------------------------------------------");

System.out.println("向量中的第一个组件为:"+v.firstElement());          //返回向量的第一个组件

System.out.println("向量中的最后一个组件为:"+v.lastElement());        //返回向量的最后一个组件

System.out.println("-------------------------------------------");

if(v.contains(new Integer(1)))                                                                  //测试向量中是否含有组件1

System.out.println("向量中包含组件1");

num = v.elements();                                                                                //通过枚举对象取出向量中的组件

while(num.hasMoreElements())

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

}

}

测试成功输出控制台显示如下信息:

4、栈(Stack);

    栈(Stack)实现了一个后进先出(LIFO)的数据结构。可以理解为垂直存储,先进的放置在底部,后进的放置在上面,取出是自顶向下取出。相关操作有:

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

    下面是Java代码实例

import java.util.Stack;

//Java数据结构-栈(Stack)

public class StackTest {

public StackTest(){

Stack st =new Stack<>();                                                  //申明栈对象st

        for(int i=0;i<3;i++){

st.push(new Integer(i));                                                    //元素入栈

            System.out.println("(" + i +")入栈");

}

System.out.println("当前栈的元素有: " + st);

System.out.println("取出栈顶元素:"+st.pop() );              //取出栈顶元素

        System.out.println("当前栈的元素有: " + st);          //查看取出栈顶元素后的栈元素

    }

}

测试成功输出控制台显示如下信息:

5、字典(Dictionary);

    字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。字典是通过特定的键而不是整数索引来访问数据。在现代Dictionary类已经过时,在实际开发中,通过实现Map接口来获取键/值的存储功能。

6、哈希表(Hashtable);

    Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。一个哈希表,要指定用作键的对象,以及要链接到该键的值,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。相关操作有:

    Object put(Object key, Object value)将指定 key 映射到此哈希表中的指定 value。                                        Enumeration keys( )返回此哈希表中的键的枚举。                                                                                          Object get(Object key)返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切          地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。

    下面是Java代码实例

import java.util.Enumeration;

import java.util.Hashtable;

//Java数据结构-哈希表(HashTable)

public class HashTableTest {

public HashTableTest() {

Hashtable hash =new Hashtable();            //申明HashTable对象hashEnumeration num;//申明枚举对象num

String str;

Double doub;

hash.put("book",new Double(1.11));            //在哈希表中添加键值对

hash.put("paper",new Double(2.22));

num = hash.keys();                                      //通过枚举取出哈希表中的键

while(num.hasMoreElements()){

str = (String)num.nextElement();

System.out.println("商品名称:"+str+"    价格:"+hash.get(str));

}

doub = ((Double)hash.get("book")).doubleValue();

hash.put("book",new Double(doub+100));      //修改哈希表中相关键的值

        System.out.println("book的新价格为:"+hash.get("book"));

}

}

测试成功输出控制台显示如下信息:

7、属性(Properties);

    Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集,所以具有HashTable的相关方法,属性列表中每个键及其对应值都是一个字符串。可用于获取环境变量时它就作为System.getProperties()方法的返回值。相关操作有:

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

    下面是Java代码实例

import java.util.Iterator;

import java.util.Properties;

import java.util.Set;

public class PropertiesTest {

public PropertiesTest(){

Properties pro =new Properties();                    //申明Properties对象 pro

Set state;

String str;

pro.put("admin","111");                                      //设置键值对

pro.put("normal","222");

state = pro.keySet();                                        //将键值对添加到HashTable

Iterator itr = state.iterator();                              //申明迭代器对象itr,取出键值对

while (itr.hasNext()){                                          //判断是否存在下一组键值对

str = (String) itr.next();                                      //返回下一组键值对

System.out.println("账号为:"+

str +"    密码为:" + pro.getProperty(str) +".");

}

str = pro.getProperty("leader","不存在");            //不存在的键,其值设置为“不存在”

System.out.println("账户为leader" + str);

}

}

测试成功输出控制台显示如下信息:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341

推荐阅读更多精彩内容

  • 慕课视频(java入门资料):https://www.imooc.com/learn/110、菜鸟教程 一. ja...
    亮涛阅读 1,561评论 0 0
  • Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration...
    863cda997e42阅读 206评论 0 1
  • ava工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration)...
    java大湿兄阅读 487评论 0 1
  • Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 以上这些类是传统遗留的,在J...
    TESTME阅读 487评论 0 0
  • 迟日江山丽, 春风花草香。 泥融飞燕子, 沙暖睡鸳鸯。 ——杜甫《绝句二首》 泡桐 泡桐,玄参目玄参科属植物。是泡...
    园崎茉莉也阅读 1,566评论 0 1