java中使用枚举器遍历的一个小问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中使用枚举器遍历的一个小问题。相关的知识,希望对你有一定的参考价值。

比如我定义了v是一个vector对象,然后赋了5个Integer对象 0~4。
下面是枚举器的使用方法
Iterator it=v.iterator();
while(it.hasnext())


System.out.println(it.next().toString());

输出结果是 0 1 2 3 4
书上说的是 通过while循环判定是否存在下一个值,存在则输出下一个值,否则退出循环。
我的问题是,既然判定当前值存在下一个值之后输出下一个值,那么第一个值按道理应该不会输出啊~~~ 求解~~~~
还有一个java小问题, 我们在定义链表的时候 是这样的
List a=new LinkedList ();
请问 List应该只是一个接口 怎么可以去定义 对象? 即使List是类 那么List 和LinkedList 这2个类应该是不一样的怎么能用等号连接起来呢?

第一个问题:
可以简单点理解为it.hasnext())是判断it迭代器是否还有下一个元素,只是一个判断,而没有将它指向it的下一个元素,当it.next()时才真正的指向下一个元素,也可以把it理解为一个数组让你更容易接受吧..

第二个问题:
//接口 对像变量 = new一个接口的实现类
List a=new LinkedList ();
java.util
接口 List<E>
所有超级接口:
Collection<E>, Iterable<E>
所有已知实现类:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector 由JDK可看到:
接口inputStream有很多子接口和实现类
上面的代码体现了编程面向接口的思想,这种思想能降低代码的耦合性,
List a= null;
a = new LinkedList ();
a =new ArrayList;
上面代码可以看出,你定义一个List变量a,就可以用这个变量记录它产生的实现类
参考技术A (1)hasnext()只判断有没有下一个,并不挪动游标;
next()才挪动游标.
同时刚开始游标指在第一个元素之前

(2)java编程的一个重要原则是“面向抽象编程”。List是个接口,LinkedList是个具体类。静态类型尽可能抽象,好处是一旦你不想用LinkedList,而改用ArraList什么的,只要改=new LinkedList ();这块,其他地方不受影响。
参考技术B iterator最开始是指向第一个结果之前的
第二个问题需要你补充下面向对象的相关知识,一言两语讲不清楚

在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML

【中文标题】在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML【英文标题】:In SSIS, how to loop through the XML inside a specific element using XPATH in a Foreach NodeList Enumerator 【发布时间】:2015-11-19 09:44:24 【问题描述】:

我正在尝试遍历 SSIS 中 XML 输入文件的 XML 元素。 为此,我尝试将“Foreach 循环容器”与 Foreach 循环容器一起使用。在 ForEach 循环容器中,我想将 xml 代码作为字符串变量获取。

我是 SSIS 的新手,已经浏览了很长一段时间的网页,但还是无法正确使用..

输入文件示例; (注意里面有一些西里尔符号,这可能会导致问题。但是,当我取出西里尔符号时,会显示相同的错误消息。

我正在尝试遍历节点。

这是我目前创建的包;

在 ForEach 循环下; 我有一个名为“CurrencyRate”的变量,它是一个映射到那里的字符串。

还有循环内的 XML 任务。这仅用于测试目的,它应该将最后一个节点元素写入该输出文件,带有标签和值。

但是,如果我按原样运行代码,我会收到以下错误消息,即使我在数据中看不到任何 NULL 值。而且我不知道日本(?)符号来自哪里......;

任何帮助将不胜感激! SSIS 看起来像一个强大的工具,我希望能够使用它。

【问题讨论】:

【参考方案1】:

我现在使用 Foreach From Variable Enumerator 而不是 Foreach NodeList 枚举器。

这是整个包裹;

使用以下变量;

在第一个脚本任务'CurrencyRates from XML to Array'中使用以下脚本; 此代码将获取 XML 并将每个节点作为对象放入数组中。然后将该数组传递给对象变量。

        public void Main()
    
        // TODO: Add your code here

        System.Collections.ArrayList arr = new System.Collections.ArrayList();

        XmlDocument doc = new XmlDocument();
        doc.Load((String)Dts.Variables["User::file_path"].Value + Dts.Variables["User::file_name"].Value);
        XmlElement root = doc.DocumentElement;
        XmlNodeList nodes = root.SelectNodes("//CurrencyRate"); // You can also use XPath here
        foreach (XmlNode CurrencyRate in nodes)
        
            arr.Add((String)CurrencyRate.InnerXml);
        


        Dts.Variables["User::CurrencyRates"].Value = arr;

        Dts.TaskResult = (int)ScriptResults.Success;
    

然后使用 Foreach From Variable Enumerator 循环该对象变量,将节点映射到对象变量“CurrencyRate_Item”。 在循环中,这个项目被移动到一个字符串变量中,然后我们可以根据需要使用它。

【讨论】:

感谢您花时间发布详细的解决方案。你今天让互联网变得更智能了。

以上是关于java中使用枚举器遍历的一个小问题。的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序怎么遍历Java后台获取到的数组

UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML

可枚举的 Qt 小部件

如何在java中遍历枚举[重复]

for..in遍历,枚举器