java扫盲 接口 Enumeration

简介:

一.初识Enumeration

    当我写网络编程的时候,我发现了这个接口。很神奇的是以前都没用过,NetworkInterface.getNetworkInterfaces()返 回的是Enumeration载体这NetworkInterface对象。Enumeration是java.util中的一个接口类,在 Enumeration中封装了有关枚举数据集合的方法。Enumeration接口本身不是一个数据结构。但是,对其他数据结构非常重要。 Enumeration接口定义了从一个数据结构得到连续数据的手段。
                                 

注意:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。

二.功能的使用

java.util Enumeration<E>

通常用 Enumeration 中的以下两个方法打印向量中的所有元素:

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

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

用法一:

vec 是接口实现类 Vector( 集合 ) 的对象, vec.elements() 获得 Vector( 集合 ) 的一个元素。



for(Enumeration e = vec.elements(); e.hasMoreElements();)

{

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

}

用法二:

e is an object that implements the Enumeration interface

while (e.hasMoreElements()) {

    Object o= e.nextElement();

    System.out.println(o);

}

下面举个例子:

public class TestEnumeration{
       public static void main(String[] args){
              Vector v = new Vector();
              v.addElement("Li");
              v.addElement("YYY");
              v.addElement("Brown");
             
              Enumeration e = v.elements();
              while(e.hasMoreElements()){
                     String value = (String)e.nextElement();
                     System.out.println(value);
              }
       }
}

你可以看到以下输出



Li
YYY
Brown

三.演示Enumeration接口的使用

下面我们就实现这个接口来完成一个小功能:

MyDataStruct类用于实例化一个简单的、可以提供enumeration对象,给使用程序的数据结果对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MyDataStruct
{
     String[] data;
 
     // 构造器
     MyDataStruct()
     {
         data = new String[ 4 ];
         data[ 0 ] = "zero" ;
         data[ 1 ] = "one" ;
         data[ 2 ] = "two" ;
         data[ 3 ] = "three" ;
     }
 
     // 返回一个enumeration对象给使用程序
     Enumeration getEnum()
     {
         return new MyEnumeration( 0 , data.length, data);
     }
}

  

MyEnumeration类实现Enumeration接口

class MyEnumeration implements Enumeration
{
    int count; // 计数器
    int length; // 存储的数组的长度
    Object[] dataArray; // 存储数据数组的引用

    // 构造器
    MyEnumeration(int count, int length, Object[] dataArray)
    {
        this.count = count;
        this.length = length;
        this.dataArray = dataArray;
    }

    public boolean hasMoreElements()
    {
        return (count < length);
    }

    public Object nextElement() {
            return dataArray[count++];
      }
}

测试类 MainClass

class MainClass
{
    public static void main(String[] args)
    {
        // 实例化MyDataStruct类型的对象
        MyDataStruct mySataStruct = new MyDataStruct();
        // 得到描述myDataStruct类型对象的enumeration对象
        Enumeration myEnumeration = mySataStruct.getEnum();
        // 使用对象循环显示myDataStruct类型的对象中的每一个元素
        while (myEnumeration.hasMoreElements())
            System.out.println(myEnumeration.nextElement());
    }
}

你可以看到下面输出:

zero
one
two
three

相关文章
|
19小时前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
38 4
|
19小时前
|
Java API 容器
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
8 1
|
19小时前
|
Java ice
【Java开发指南 | 第二十九篇】Java接口
【Java开发指南 | 第二十九篇】Java接口
6 0
|
19小时前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
19小时前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
44 3
|
19小时前
|
Java API
Java 接口
5月更文挑战第6天
|
19小时前
|
存储 安全 Java
Java一分钟之-Map接口与HashMap详解
【5月更文挑战第10天】Java集合框架中的`Map`接口用于存储唯一键值对,而`HashMap`是其快速实现,基于哈希表支持高效查找、添加和删除。本文介绍了`Map`的核心方法,如`put`、`get`和`remove`,以及`HashMap`的特性:快速访问、无序和非线程安全。讨论了键的唯一性、`equals()`和`hashCode()`的正确实现以及线程安全问题。通过示例展示了基本操作和自定义键的使用,强调理解这些概念对编写健壮代码的重要性。
9 0
|
19小时前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
11 0
|
19小时前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
19小时前
|
Java
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口