- 浏览: 66542 次
- 性别:
- 来自: 杭州
文章分类
最新评论
对于集合的一个基本的操作利用foreach语句遍历集合以处理集合中的每个元素。看下面的代码:
// 下面是关于foreach语句的使用,代码非常简洁和紧凑 Stack<String> collection = new Stack<String>(); // .... for (String s : collection) { System.out.println(s); } // ... // 下面使用while语句来代替上面的foreach语句来实现相同的功能 Stack<String> collection = new Stack<String>(); Iterator<String> iterator = collection.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
上面的代码说明为了使用foreach语句我们必须实现可迭代的集合,在Java中就是实现Iterable<T>接口:
// java.lang.Iterable public interface Iterable<T> { Iterator<T> iterator(); }
其实,我们要实现的有两个方面:(1)集合必须实现iterator()方法,并返回一个Iterator(这在Java中也是个接口)对象。(2)Iterator类必须包括两个方法:1.hasNext(),返回一个布尔值。2.next(),返回集合中的一个元素。下面是一个例子:
import java.util.Iterator; import java.util.NoSuchElementException; public class Stack<E> implements Iterable<E> { private int size; // size of the stack private Node first; // top of stack // helper linked list class private class Node { private E element; private Node next; } // create an empty stack public Stack() { size = 0; first = null; assert check(); } // Is the stack empty? public boolean isEmpty() { return (first == null); } // return the number of items in the stack public int size() { return size; } /* Add the element to the stack. */ public void push(E element) { Node oldfirst = first; first = new Node(); first.element = element; first.next = oldfirst; size++; assert check(); } /* Delete and return the item most recently added to the stack. @throws java.util.NoSuchElementException if the stack is Empty */ public E pop() { if (isEmpty()) { throw new NoSuchElementException("Stack underflow"); } E element = first.element; // save element to return first = first.next; // delete first node size--; assert check(); return element; // return the saved element } /* Return the element most recently added to the stack. @throws java.util.NoSuchElementException if stack is Empty. */ public E peek() { if (isEmpty()) { throw new NoSuchElementException("Stack underflow"); } return first.element; } /* Return string representation. */ public String toString() { StringBuilder sb = new StringBuilder(); for (E element: this) { sb.append(element + "-"); } return sb.toString(); } /* check internal invariants */ private boolean check() { if (size == 0) { if (first != null) { return false; } } return true; } /* return an iterator to the stack that iterates through the elemets in LIFO order */ public Iterator<E> iterator() { return new ListIterator(); } // an iterator,doesn't implement remove() since it's optional private class ListIterator implements Iterator<E> { private Node current = first; public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public E next() { if (!hasNext()) { throw new NoSuchElementException(); } E element = current.element; current = current.next; return element; } } public static void main(String[] args) { Stack<String> s = new Stack<String>(); while (!StdIn.isEmpty()) { String element = StdIn.readString(); if (!element.equals("-")) { s.push(element); }else if(!s.isEmpty()) { StdOut.print(s.pop() + " "); } } StdOut.println("(" + s.size() + "left on stack)"); } }
发表评论
-
Java中的正则表达式学习笔记
2013-04-02 21:40 814关于正则表达式的定义可以看维基百科中的解释——正则 ... -
关于JVM的一些知识点
2013-03-26 14:22 660分享一篇介绍JVM的文章。 -
Java多线程学习
2013-03-26 10:27 0/* 开启三个子线程,id分别为0,1,2。写一个程序输出0 ... -
Java集合框架(3)
2012-12-06 19:27 658Map(和Collection<E> ... -
Java集合框架(2)
2012-12-06 19:17 897|--Set:元素是无序(存入 ... -
Java中如何重写equals()方法
2012-11-28 18:45 847/* 对于equals()的实现(重写,继承于Objec ... -
Java中关于引用类型的赋值
2012-11-28 10:07 0Assignment statements. An a ... -
Java集合框架(1)
2012-11-29 22:04 694集合是存储对象最 ... -
Java多线程之生产者与消费者
2012-11-20 18:34 0生产者与消费者 -
String,StringBuffer和StringBuilder
2012-11-21 15:18 1185(1)String类用于描述字符串事物。它提供很多方 ... -
Java多线程(2)
2012-11-20 16:36 591... -
Java的字符流和字节流
2011-12-09 17:35 542IO分两种流字节流 InputStream OutputStr ... -
Windows下JDK环境变量配置
2012-11-17 21:44 732给下链接:http://docs.oracle.com/jav ... -
Java多线程(1)
2012-11-18 20:33 7901.首先我们明确一 ...
相关推荐
◆switch语句中控制表达式的类型只能是byte、short、char、int、String(JDK7新增)和枚举 Switch语句容易导致的错误 •switch语句后的expression表达式的数据类型只能是byte、short、char、int、String...
依次讲解了C#开发基础、搭建C#开发环境、变量与常量、复杂的变量类型和.NET框架类、表达式和运算符、流程控制语句、面向对象编程技术基础、方法、C#类、C#集合、数组和集合类、foreach语句、自定义集合类和迭代器、...
第3课 常见Java集合的实现细节 3.1 Set和Map 3.1.1 Set和Map的关系 3.1.2 HashMap和HashSet 3.1.3 TreeMap和TreeSet 3.2 Map和List 3.2.1 Map的values()方法 3.2.2 Map和List的关系 3.3 ArrayList和...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
(1) foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下: foreach (type ...
{4.7}集合的迭代(Iterator)}{85}{section.4.7} {4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{subsection.4.9.1} {4.9.2}Comparator...
4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码. 2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数...
和 C++ 有所区别的是,C# 中没有单独的声明(头)和实现(CPP)文件。所有代码(类声明和实现)都放在扩展名为 cs 的单一文件中。 看看 C# 中的 Hello World 程序。 复制内容到剪贴板 代码: using System; ...
22.使用迭代器遍历集合 23.函数式编程之foreach 24.函数式编程之简化函数定义 25.函数式编程之映射 26.函数式编程之扁平化映射 27.函数式编程之过滤 28.函数式编程之默认排序 29.函数式编程之指定字段排序 ...