- 浏览: 68901 次
- 性别:
- 来自: 杭州
文章分类
最新评论
对于集合的一个基本的操作利用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 854关于正则表达式的定义可以看维基百科中的解释——正则 ... -
关于JVM的一些知识点
2013-03-26 14:22 731分享一篇介绍JVM的文章。 -
Java多线程学习
2013-03-26 10:27 0/* 开启三个子线程,id分别为0,1,2。写一个程序输出0 ... -
Java集合框架(3)
2012-12-06 19:27 711Map(和Collection<E> ... -
Java集合框架(2)
2012-12-06 19:17 945|--Set:元素是无序(存入 ... -
Java中如何重写equals()方法
2012-11-28 18:45 890/* 对于equals()的实现(重写,继承于Objec ... -
Java中关于引用类型的赋值
2012-11-28 10:07 0Assignment statements. An a ... -
Java集合框架(1)
2012-11-29 22:04 728集合是存储对象最 ... -
Java多线程之生产者与消费者
2012-11-20 18:34 0生产者与消费者 -
String,StringBuffer和StringBuilder
2012-11-21 15:18 1231(1)String类用于描述字符串事物。它提供很多方 ... -
Java多线程(2)
2012-11-20 16:36 623... -
Java的字符流和字节流
2011-12-09 17:35 569IO分两种流字节流 InputStream OutputStr ... -
Windows下JDK环境变量配置
2012-11-17 21:44 769给下链接:http://docs.oracle.com/jav ... -
Java多线程(1)
2012-11-18 20:33 8261.首先我们明确一 ...
相关推荐
Java 集合是 Java 语言中最基本的数据结构之一,通过了解 Java 集合的基本概念、种类、特点、迭代器、增强 for 循环等,可以更好地掌握 Java 集合的使用方法和优化技术,从而提高编程效率和代码质量。
Java中的For循环是编程语言中最基础且常用的控制流结构之一,尤其在处理迭代或重复任务时,它的灵活性和效率使其成为首选。这个“视频教程:Java中的For循环语句用法精讲.rar”旨在深入讲解Java中For循环的各个方面...
在Java中,有两种主要的循环结构:for循环和while循环,这两种循环在编写控制流程、处理数组、迭代集合等场景时非常常见。 **一、for循环** for循环是一种预定义迭代的循环结构,适用于已知循环次数的情况。基本...
Java是一种广泛使用的面向对象的编程语言,其循环语句是编程中最基础且重要的部分,用于重复执行一段代码,直到满足特定条件为止。本篇将详细讲解Java中的典型循环语句,包括数组循环和遍历循环。 1. **for循环**:...
在Java编程语言中,循环语句是不可或缺的一部分,它们用于执行特定代码块多次,直到满足某个条件为止。这里,我们有一个名为"Java循环语句学习例子源码程序"的资源,它提供了一个实际的Visita风格登录界面的实现,...
在 Java 编程语言中,foreach 和 for 是两种常用的循环语句,都是用于遍历数组或集合的元素。然而,foreach 和 for 之间存在一些关键的区别,了解这些区别对于编写高效的代码非常重要。 foreach 语句,也称为增强 ...
Java集合框架是面试中常考的部分,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类: 1. 集合特性:线程安全、是否允许重复元素、排序规则等。 2. 遍历方式:迭代器、增强for...
在Java编程语言中,`foreach`循环,也称为增强型for循环或迭代器循环,是处理数组和集合数据的一种简洁高效的方式。这个小视频详细介绍了如何在Java中正确使用`foreach`循环,让我们深入探讨一下相关知识点。 首先...
除了这三种基础循环结构,Java还提供了其他一些高级特性,如增强型for循环(也称为foreach或迭代器循环),用于遍历数组或集合: ```java for (类型 变量 : 集合或数组) { // 循环体 } ``` 例如,遍历数组: ```...
在实际开发中,`foreach`循环广泛应用于各种场景,如数据处理、集合操作和算法实现。例如,你可以用它来计算数组的总和、查找最大值或最小值,甚至实现更复杂的逻辑,如分组、过滤或映射数据。 总结来说,`foreach`...
- **增强型for循环**(foreach):遍历数组或集合。 ```java for (Type item : collection) { // 遍历collection中的每个item } ``` 3. **跳转语句** - **break**:跳出最内层的循环或switch语句。 - **...
- **处理数组或集合中的特殊位置**:例如,你可能希望忽略数组的第一个或最后一个元素,`continue`可以帮你实现这一点。 总的来说,`continue`语句在Java编程中扮演着不可或缺的角色,它提供了更精细的控制,帮助...
只要数据结构实现了迭代器接口,`foreach`就可以在其上工作,这大大提高了代码的可复用性和适应性。 4. **性能优化**:编译器通常会对`foreach`循环进行优化,使其在运行时更高效。相比于手动编写基于索引的循环,`...
- 遍历和迭代器:使用`foreach`循环或Iterator遍历集合元素。 7. **输入/输出(I/O)** - 文件操作:使用File类进行文件的创建、删除、重命名等操作。 - 流(Stream):用于读写数据,分为字节流和字符流,如...
语句嵌套形式其实就是语句中还有语句。形式多种多样,没有固定的格式和套路。例如,打印偶数代码如下: ```java for(int x=1;x;x++){ if(x%2==1)continue; System.out.println("x="+x); } ``` 二、累加求和 累加...
MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...
Java循环语句是编程语言中不可或缺的一部分,它们用于在满足特定条件时重复执行代码块,这对于处理迭代、遍历数组或集合以及实现复杂的算法至关重要。Java提供了多种类型的循环语句,包括for、while和do-while,每种...
- 原生SQL:通过在查询语句中添加LIMIT和OFFSET来实现分页。 - ORM框架:利用Hibernate或MyBatis等框架提供的分页插件或API进行分页。 对于Struts框架,可以在Action类中处理分页逻辑。Action类是Struts 2的核心...
Java笔试题集合是Java开发者在求职过程中经常遇到的一类测试,涵盖了从基础语法到高级特性的广泛知识领域。以下是一些常见的Java笔试题及其相关的知识点: 1. **基础语法** - **数据类型**:Java有八种基本数据...
这个标签用于执行条件判断,类似于Java中的`if`语句。基本语法如下: ```jsp 条件表达式"> <!-- 当条件满足时,这里的代码将被渲染 --> ``` 其中,`test`属性是一个EL(Expression Language)表达式,用于评估...