增强for循环(foreach)、可变参数(...)
格式
for(元素的数据类型 变量名 :遍历的目标){ }
前提
只有实现了Iterable接口 的对象或者是数组对象才能使用
注意的细节(区别)
- 增强的for循环,底层还是通过获取迭代器的方式进行遍历的,只不过不需要我们手动获取迭代器而已,所以使用增强for循环的遍历元素时,不能使用集合对象改变集合对象中的元素个数
- 增强for循环与迭代器的区别是:增强for循环只能用于遍历集合中的元素,不能增删元素(因为根本找不到迭代器),迭代器不仅可以遍历集合中的元素,也能增删集合中的元素
- 增强for循环在使用的时候必须要存在一个遍历的目标对象,而普通的for循环可以不存在遍历的目标对象
- 如果需要使用增强for循环遍历map集合,则需要实现entry方法,代码如下:
import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub TreeMap<String, String> map = new TreeMap<String , String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); map.put("113", "陈六"); Set<Entry<String, String>> entryes = map.entrySet(); for(Entry<String, String> entry : entryes){ System.out.println("键:"+entry.getKey()+" "+"值:"+entry.getValue()); } } }
自定义的类实现Iterable接口的对象 使用增强for循环
import java.util.Arrays; import java.util.Iterator; //自定义的类实现Iterable接口的对象是否可以使用增强for循环? //自定义集合类 class MyList implements Iterable<String>{ Object [] arr; //当前的索引值 int index = 0; public MyList(){ arr = new Object[10]; } //自定义给数组中添加元素的方法 public void add(Object o){ index++; ensuerCaption();//检查长度 arr[index - 1] = o; } //检查当前的长度是否够用,如果不够用的话就自动增长0.5倍 public void ensuerCaption(){ if(index == arr.length){ int newLength = (int) (arr.length * 0.5); arr = Arrays.copyOf(arr, newLength); } } //实现Iterable接口中的iterator方法 @Override public Iterator<String> iterator() { // TODO Auto-generated method stub return new Iterator<String>() {//使用内部类返回Iterator接口 //定义一个游标 int cursor; @Override public boolean hasNext() { // TODO Auto-generated method stub return cursor != index; } @Override public String next() { // TODO Auto-generated method stub return (String) arr[cursor++]; } }; } } public class Demo1 { public static void main(String[] args) { MyList myList = new MyList(); myList.add("张三"); myList.add("李四"); myList.add("王五"); myList.add("找刘五"); for(String item : myList){ System.out.println(item); } } }
可变参数
- 格式:
数据类型 ... 变量名
- 注意事项:
- 如果一个函数的形参使用了可变参数,那么调用该函数的时候可以传递参数也可以不传递参数
- 可变参数实际上就是一个数组
- 可变参数必须位于,形参列表中最后一个位置
- 一个方法中最多只能使用一个可变参数(因为最后位置只有一个)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python高级进阶(二)Python框架之Django写图书管理系统(LMS)
正式写项目准备前的工作 Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我们需要给Django做文件配置和数据库配置 上一章写过的文章,有些朋友反应,对于Web框架部分写的过于深入,而对于Django项目讲解的比较少,感觉实用性不强,我想说 # 万物本源,你在写项目的时候,如果连最基本的原理都不懂,出了Bug你怎么解决 # 如果是在看不懂,只需要理解http通信原理就可以了,以后我会翻译Django网站部分内容并带大家解读Djaogo源码,如果那时候你还在看我的博客的话,你会发现现在这些都是A piece Of cake 我想说的话 今天我会带大家真正写一个Django项目,对于入门来说是有点难度的,因为逻辑比较复杂,但是真正的知识就是函数与面向对象,这也是培养用Django思维写项目的开始 Django文件配置 Django模版文件配置 文件路径 test_site -- test_site -- settings.py TEMPLATES = [ { 'BA...
- 下一篇
Python装饰器AOP 不定长参数 鸭子类型 重载(三)
1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被传入,则传入默认预设的值。 注意 : 须将所有带有默认值的参数置于参数列表的末尾。 def print_info(name, age = 18,gender = True ) print_info("zhan", gender = False ) def demo(num, *nums ,**nums ) 当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数: >>> def print_everything(*args): for count, thing in enumerate(args): ... print '{0}. {1}'.format(count, thing) ... >>> print_everything('apple', 'banana', 'cabbage') 0. apple 1. ban...
相关文章
文章评论
共有0条评论来说两句吧...