1、day07迭代器增强for泛型反馈:*讲下split public String split(符号);/ 如果符号比较特殊,用到了正则表达式中特殊含义的符号 需要转译 在Java中使用 . 比如: .+ 一个以上连续任意个. 都会被匹配到第7天_面向对象(集合) 1.集合的介绍 一个变量只能存储一个值,当出现大量的变量用来存储数据的时候 这时候我们想到数组,但是数组有问题?数组的定长的! 所以我们用到了集合,而集合是变长 a.集合的特点和作用 集合最大的特点:长度随着元素个数的增加而增加(javascript中数组是可变) 作用:存储大量的对象 b.集合框架的由来 集合框架的根接口是Colle
2、ction接口 2.集合框架* a.集合框架体系(见图) 3.Collection接口中定义的方法* 记住:只要是容器,他的方法增删改查 增加:public boolean add(E e);返回值表示是否添加成功 删除:public boolean remove(Object obj);返回值表示是否删除成功 修改:没有 获取:public int size();长度 其他方法: public void clear();/清空集合,把集合中元素全删除,但是集合还是存在的 把集合置为null;/把整个集合丢了 public boolean contains(Object o);/判断集合中是否
3、包含某个元素 public Object toArray();/把集合转成数组 public boolean isEmpty();/判断集合是否为空, 底层 size() = 0 4.迭代器 迭代器属于什么类型? Iterator类型 迭代器Iterator 中常用的两个方法Public boolean hashNext();/ 判断集合还有没有元素Public 类型Next(); /读取这个元素 获取集合的迭代器对象:Iterator it = 集合.iterator();遍历集合步骤: 1.创建对象集合对象(自带了一个Iterator对象)2.获取到Iterator对象Iteratorit
4、 = c.iterator();/面向接口编程3. 遍历集合方法:方法一:while(it.hashNext() 和集合一样的类型 变量名 = it.next(); syso(变量名) 并发修改异常:不能在迭代器遍历集合的过程中 添加或者删除元素(不能做对集合长度有影响的操作)方法二:foreach,然后快捷键alt+/ 遍历集合: while(it.hashNext() 和集合一样的类型 变量名 = it.next(); syso(变量名) 并发修改异常:不能在迭代器遍历集合的过程中 添加或者删除元素(不能做对集合长度有影响的操作)例如:publicstaticvoid main(Strin
5、g args) / TODO Auto-generated method stub /1.创建对象集合对象(自带了一个Iterator对象) /用多态接收 Collectionc = new ArrayList(); /添加几个数据 c.add(itcast); c.add(alibaba); c.add(tencent); c.add(sohu); c.add(netease); /2.获取到Iterator对象 Iteratorit = c.iterator();/面向接口编程 /3.a.问有没有下一个元素 while(it.hasNext() String s = it.next();
6、System.out.println(s); /4.但是如果it的hasNext返回值是false /String next = it.next();不能再取,因为集合中没有下一个元素了 5.并发修改异常;/* * 使用Iterator对象遍历集合, * 如果出现”itcast”字符串, * 那么向集合中添加一个大写的”ITCAST”字符串 * * 这时候出现了一个异常:Concurrent(并发)Modification(修改)Exception(异常) * * 解释这个异常出现的原因: Java规定集合在用迭代器遍历的过程中,不能添加/删除元素(不能修改和长度有关) * *原因:迭代器中”
7、记忆”的集合长度与集合中实际长度不同,而导致出现索引与实际元素不符甚至无限循环的情况发生。 */例如:publicclass ConcurrentModificationExceptionDemo publicstaticvoid main(String args) / TODO Auto-generated method stub /1.创建集合并且添加数据 Collectionc = new ArrayList(); c.add(baidu); c.add(itcast); c.add(tencent); c.add(sohu); c.add(google); /2.遍历集合(用迭代器)
8、Iteratorit = c.iterator();/迭代器就会记住 集合的长度是5 while(it.hasNext() String next = it.next(); /3.判断是不是itcast if(itcast.equals(next) /4.向集合中添加一个ITCAST c.add(ITCAST);/实际长度变了 变成6了 5.增强for循环 增强for循环是JDK1.5出现的新特性: 作用:专门用来快速遍历数组或者集合 格式: for(数据类型 变量:数组/集合) 每一次循环 自动从数组或者集合中取出一个元素,保存到变量中 我们只要操作这个变量即可 原理:增强for循环底层的原
9、理是迭代器,同样不能在使用增强for循环遍历过程中 添加或者删除元素 缺点:使用增强for循环 是不能知道是第几个元素 增强for循环什么时候用合适:只操作元素内容,不关心元素下标的时候例如:/* * 使用增强for循环遍历数组和集合 * * for(数据类型 变量:数组/集合) * 每一次循环 自动从数组或者集合中取出一个元素,保存到变量中 * 我们只要操作这个变量即可 * * * */publicclass StrongForDemo publicstaticvoid main(String args) / TODO Auto-generated method stub /1.遍历数组 i
10、nt nums = 1,2,34,5,6; /2.用增强for循环遍历数组 for(intnum:nums) /每次循环都会从数组中取出一个元素,保存到num中 System.out.println(num); /3.遍历集合 Collectionc = newArrayList(); c.add(1); c.add(2); c.add(3); c.add(4); /4.遍历 for(inti : c)/自动拆装箱 /System.out.println(i); if(i=2) c.add(200); /JDK1.8中 一句话,lambda表达式 6.泛型的介绍 0.泛型的介绍: 什么是泛型:
11、泛泛的类型,是一种不确定的类型 泛型的格式:, 比如; ArrayList 1.泛型的好处:提高安全性 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。 避免了类型强转的麻烦 例如:/* * 泛型的好处: * 1.不使用泛型 * * 2.使用泛型 * * authoryingpeng * */publicclass GenericDemo publicstaticvoid main(String args) / TODO Auto-generated method stub generic(); /不使用泛型 publicstaticvoid noGeneri
12、c() /什么叫不使用泛型,就是不写 ArrayListarr = newArrayList(); /不写泛型 那么arr中可以存任何的引用类型 arr.add(1); arr.add(java); arr.add(true); arr.add(1.5F); arr.add(1.5); /遍历 /这时候程序就出现了安全问题 for (Object obj : arr) String i = (String)obj; System.out.println(i); /使用泛型 publicstaticvoid generic() /使用泛型指的是 写上 ArrayListarr = new Arr
13、ayList(); /添加数据 arr.add(1); arr.add(java); arr.add(3.14); arr.add(true); /遍历 for (String s : arr) System.out.println(s); 2.泛型的定义了解 探究:泛型中的的含义,代表不确定的类型 泛型的本质:它是一个变量,可以接收一种数据类型 泛型用法比较广,可以用在类上,方法上,接口上 a.泛型类:是指泛型用在类上,比如ArrayList 泛型类上的泛型什么时候确定?创建该类对象的时候,我们可以确定 b.泛型方法:是指泛型用在方法上 泛型方法上的泛型什么时候确定?调用该方法并且传入参数的时候我们可以确定 c.泛型接口:是指泛型用在接口上,比如:Collection3.泛型接口上的泛型什么时候确定? 1.在实
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1