达内课程-foreach循环/可变长参数/枚举/泛型
来源:互联网 发布:php html解析器 编辑:程序博客网 时间:2024/05/09 23:42
for-each格式循环
1、是数组遍历、集合迭代器遍历的语法简化
2、数组a
for(int i=0;i<a.length;i++){ String s = a[i]; //处理s}
执行顺序其实是一样的,数组a里存放了字符串,下标递增,分别取出值,赋值给s
for(String s:a){ //处理s}
3、集合list
for(Iterator<String> it=list.iterator();it.hasNext();){ String s = it.next() //处理s}
取值方式和上边是一样的,先用list创建一个迭代器对象,然后用迭代器对象的next()方法来取数据
for(String s:list){ //处理s}
栗子
public class Test { public static void main(String[] args) { HashMap<Integer,String> map = new HashMap<>(); map.put(9527,"王力宏"); map.put(9528,"王丽坤"); map.put(9529,"王小利"); //添加重复的键,新的值会覆盖以前的值 map.put(9528,"王尼玛"); map.put(9530,null); map.put(null,"---"); System.out.println(map.size()); //数据显示无序 System.out.println(map); System.out.println(map.get(9527)); System.out.println(map.get(9999)); System.out.println(map.containsKey(9527)); System.out.println(map.containsValue("Errol")); //返回被移除的值 System.out.println(map.remove(9529)); System.out.println(map.remove(9999)); System.out.println("-------------------"); Set<Integer> keys = map.keySet(); for(Iterator<Integer> it = keys.iterator();it.hasNext();){ System.out.println(it.next()); } System.out.println("-------------------"); Set<Entry<Integer,String>> entrys = map.entrySet(); for(Iterator<Entry<Integer, String>> it = entrys.iterator();it.hasNext();){ Entry<Integer, String> e = it.next(); System.out.println(e.getKey()+"="+e.getValue()); } System.out.println("-------------------"); Collection<String> values = map.values(); for(Iterator<String> it = values.iterator();it.hasNext();){ System.out.println(it.next()); } System.out.println("-------------------"); for(Entry<Integer,String> e:entrys){ System.out.println(e.getKey()+"="+e.getValue()); } }}
输出结果
5{null=---, 9527=王力宏, 9528=王尼玛, 9529=王小利, 9530=null}王力宏nulltruefalse王小利null-------------------null952795289530-------------------null=---9527=王力宏9528=王尼玛9530=null----------------------王力宏王尼玛null-------------------null=---9527=王力宏9528=王尼玛9530=null
可变长参数
是数组参数的语法简化
f()方法
void f(int[] a){ //处理数组a}
调用f()时:
f(new int[]{1,2,3,4});f(new int[]{1,2});f(new int[]{});
f()方法
void f(int... a){ //处理数组a}
调用f()方法
f(1,2,3,4)f(1,2)f()
达内课程-Set集合和Collection用到的addAll就是一个可变长参数的方法
public static <T> boolean addAll(Collection<? super T> c, T... elements) { boolean result = false; for (T element : elements) result |= c.add(element); return result; }
枚举
enumeration
一组固定选项
代替整数代码常量选项,提供类型安全的选项
TYPE_CODE = 1;TYPE_HEAT = 2;TYPE_NUCLEAR = 3;void f(int type){}f(1);
//定义枚举
enum WeaponType{
COLD,HEAT,NUCLEAR
}
每个选项,本质是WeaponType类型的实例
public static final WeaponType COLD = new WeaponType();
void f(WeaponType type){
}
f(WeaponType.COLD);
栗子是基于
达内课程-面向对象之接口修改
MainActivity和xml和之前的教程是一样的
涉及到修改的类有:
Weapon类
public interface Weapon { void kill(TextView textView); String getName(); WeaponType getType();}
Sword类
public class Sword implements Weapon { @Override public void kill(TextView textView) { textView.append("耍剑"); } @Override public String getName() { return "倚天剑"; } @Override public WeaponType getType() { return WeaponType.COLD; }}
Lyb
public class Lyb implements Weapon { @Override public void kill(TextView textView) { textView.append("耍棒"); } @Override public String getName() { return "狼牙棒"; } @Override public WeaponType getType() { return WeaponType.NUCLEAR; }}
AK47
public class AK47 implements Weapon { @Override public void kill(TextView textView) { textView.append("耍枪"); } @Override public String getName() { return "AK47"; } @Override public WeaponType getType() { return WeaponType.HEAT; }}
Transformer
public class Transformer { private Weapon w; public void setWeapon(Weapon w){ this.w = w; } public void attack(TextView textView){ if(w == null){ textView.setText("用牙咬"); return; } String type = ""; switch (w.getType()){ case COLD:type = "冷兵器"; case HEAT:type = "热兵器"; case NUCLEAR:type = "核武器"; } textView.setText("使用"+type+w.getName()); w.kill(textView); }}
泛型
generic type
1、是一种类型参数
void f(int a){}调用f()方法时,f(10)传入的10是数据参数泛型是这样的,传入一个类型,可以是String,Integer等例如class A<Type>{}
2、泛型变量名,习惯使用有意义单词首个字母大写
class A<T>{}
栗子
Holder类
public class Holder<T>{ private T t; public T getT(){ return t; } public void setT(T t){ this.t = t; }}
Test类
public class Test { public static void main(String[] args) { Holder<String> h1 = new Holder<>(); Holder<Double> h2 = new Holder<>(); h1.setT("abc"); h2.setT(3.14); String s = h1.getT(); Double d = h2.getT(); System.out.println(s); System.out.println(d); }}
输出结果
abc
3.14
栗子2
Holder类不变
Test类修改如下
public class Test { public static void main(String[] args) { //raw type //原始类型,即Object Holder h = new Holder(); //有黄线警告,应该有泛型,不传的话也能执行 h.setT("abc"); h.setT(3.14); //但是取值的时候必须强转 //最后一次放入的是Double类型,所以强转为Double Double d = (Double)h.getT(); System.out.println(d); }}
输出结果
3.14
栗子3
Holder类不变
Test类修改如下
public class Test { public static void main(String[] args) { Holder<Integer> a = new Holder<>(); Holder<Double> b = new Holder<>(); Holder<String> c = new Holder<>(); a.setT(10); b.setT(3.14); c.setT("abc"); f1(a); f1(b); f1(c); f2(a); f2(b); //f2(c);只允许传数字,不能传其他类型 } /* *<?>表示某种特定类型的 */ private static void f1(Holder<?> h){ Object v = h.getT(); System.out.println(v); //不能放入数据h.set(3.14); //只能放入null //h.setT(null); } /* *<? extends Number> *表示某种特定类型的 *并且是Number的子类型 */ private static void f2(Holder<? extends Number> h){ Number v = h.getT(); System.out.println(v); //限制放入数据 }}
输出结果
103.14abc103.14
阅读全文
0 0
- 达内课程-foreach循环/可变长参数/枚举/泛型
- 可变长度参数以及foreach循环原理
- 12 foreach 装箱拆箱 可变参数 枚举
- Java复习之Foreach循环与可变参数
- Java复习——foreach循环与可变参数
- 《Java5.0新特性》 枚举、泛型、注释 包装类、静态应用、可变长参数、for-each
- 泛型、foreach、静态导入、可变参数
- Foreach与可变参数
- 静态导入 可变参数 增强for循环 自动装箱 枚举
- 黑马程序员--高新技术--可变参数,增强for循环,枚举
- 静态导入,可变参数,枚举与增强型for循环
- 可变长参数
- 可变长参数
- java 可变长参数
- 可变长参数函数
- 可变长参数函数
- 可变长参数列表
- 可变长参数示例
- 读取歌词文本并按时间显示歌词
- newCoder Wannafly挑战赛4:C 割草机
- MR--InputFormat
- 一分钟搭建gitolite服务器
- 【Scikit-Learn 中文文档】半监督学习
- 达内课程-foreach循环/可变长参数/枚举/泛型
- 程序员常见的笔试题
- AI领域现百万级人才缺口,50万高薪仍难觅
- less is more
- iOS库 .a与.framework区别
- html常用头标签
- javascript如何求数组的最大值和最小值
- Linux中zip压缩和unzip解压缩命令详解
- 使用swiper 轮播插件ajax 请求加载图片时,无法滑动