Day 4:集合——迭代器与List接口
Collection-迭代方法
1、toArray() 返回Object类型数据,接收也需要Object对象! Object[] toArray();
Collection c = new ArrayList();
Object[] arr = c.toArray();
2、iterator() Collection的方法,返回实现Iterator接口的对象,一般用Iterator接口类型数据接收,体现程序的多态性,是程序灵活的表现


迭代器的作用:就是用于抓取集合中的元素。
迭代器的方法:
            hasNext()   问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。
            next()         获取元素
            remove()    移除迭代器最后一次返回 的元素。
NoSuchElementException 没有元素的异常。 
出现的原因: 没有元素可以被迭代(抓取)了
import java.util.*;
public class Demo1 { public static void main(String[] args) {
Collection c = new ArrayList();
Collection r = new ArrayList();
c.add("李杰");
c.add("李英");
c.add("李汉斯");
c.add("李汉三");
c.add("狗蛋"); Iterator b = c.iterator();
Iterator h = r.iterator();
//返回一个迭代器
//疑问:iterator()方法返回的是一个接口类型,为什么接口又可以调用方法可以使用呢?
//iterator 实际 上返回的是iterator接口的实现类对象。
System.out.println(b.hasNext());
System.out.println(h.hasNext()); b.next();
b.next();
b.remove(); //删除迭代器最后一次返回的元素。 /*while(b.hasNext()){ // hasNext() 问是否有元素可以遍历。
System.out.println("元素:"+ b.next()); //获取元素
}*/
/*清空集合 的元素
while(b.hasNext()){
b.next();
b.remove();
}*/
System.out.println("集合的元素:"+ c);
}
}
因为迭代器不会返回元素,所以remove();方法不会主动移除集合中数据,需要配合next()使用。及删除的是next()最后一次抓取的数据
遍历集合的方法
1、
Object[] arr = c.toArray(); // toArray()  把集合 的元素存储到一个 Object的数组中 返回。
for(int i = 0 ; i<arr.length ; i++){
 System.out.print(arr[i]+",");
}
2、使用hasNext()    next()组合方法便利
while(it.hasNext()){
User user = (User) it.next();
if(user.account==id&&user.password.equals(password)){
isLogin = true;
     }
}
3、
使用get方法遍历集合的元素:
  for (int i = 0; i < list.size() ; i++) {
   System.out.print(list.get(i)+",");
  }
集合的体系:
Collection 单列集合 的根接口
List 如果是实现了List接口的集合类,该集合类具备的特点:有序,可重复
Set 如果是实现了Set接口的集合类,该集合类具备的特点: 无序,不可重复
List接口
有序: 集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的
List接口中特有的方法具备的特点: 操作的方法都存在索引值。 
只有List接口下面的集合类才具备索引值。其他接口下面的集合类都没有索引值。
List接口中特有方法:
添加
    add(int index, E element) 
    addAll(int index, Collection<? extends E> c) 
获取:
    get(int index) 
    indexOf(Object o) 
    lastIndexOf(Object o) 
    subList(int fromIndex, int toIndex) 
修改:
    set(int index, E element) 
迭代
listIterator()
import java.util.*;public class Demo2 {
    public static void main(String[] args) {
        List list=  new ArrayList();
        list.add("李杰");
        list.add("李英");
        list.add("李汉三");
        list.add("李汉斯");
        /*
        //添加方法
        list.add(2, "李四");
        List list2 = new ArrayList();
        list2.add("张三");
        list2.add("王二");
        list.addAll(2,list2);
        */
        /*
        //获取的方法
        System.out.println(list.get(1)); //根据索引值获取集合中的元素
        使用get方法遍历集合的元素:
        for (int i = 0; i < list.size() ; i++) {//判断集合长度用size()
            System.out.print(list.get(i)+",");
        }
        System.out.println(list.indexOf("李杰"));//找出指定元素第一次出现在集合中 的索引值
        System.out.println(list.lastIndexOf("李汉斯"));//找指定的元素最后一次出现在集合中的索引值
        List subList = list.subList(1, 3); //指定开始与结束的索引值截取集合中的元素。
        System.out.println(subList)//返回值是一个List输出子集合的元素
        */
        list.set(3, "李白"); //使用指定的元素替换指定索引值位置的元素。
        System.out.println(list);//输出集合的元素,查看效果
    }
}
ListIterator接口特有的方法:
 
 添加:
    hasPrevious()  判断是否存在上一个元素
    previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素
    next();  先取出当前指针指向的元素,然后指针向下移动一个单位
    add(E e)   把当前有元素插入到当前指针指向的位置上
    set(E e)   替换迭代器最后一次返回的元素
import java.util.*;
public class Demo3 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("李杰");
        list.add("李英");
        list.add("李汉三");
        list.add("李汉斯");
        ListIterator it = list.listIterator(); //返回的是一个List接口中特有的迭代器
        /*System.out.println(it.hasPrevious())//判断是否有上一个元素,有true,没有false
        System.out.println(it.previous());//获取上一个元素
        it.next();
        System.out.println(it.previous());//获取上一个元素 
        while(it.hasNext()){
            it.next();
        }
        while(it.hasPrevious()){
            System.out.println("元素:"+ it.previous());
        }
        it.next();
        it.next();
        it.add("李白");
        */
        it.next();
        it.next();
        it.set("李白");
        System.out.println("集合的元素:"+ list);
    }
}
作业: 使用三种方式遍历集合的元素.  
  一、 使用get方法遍历。
  二、 使用迭代器正序遍历。
  三、 使用迭代器逆序遍历。
import java.util.*;
public class Demo4 { public static void main(String[] args) {
List list = new ArrayList();
list.add("李杰");
list.add("李英");
list.add("李汉三"); for(int i = 0 ; i<list.size() ; i++){
System.out.print(list.get(i)+",");
}
System.out.println();
ListIterator it = list.listIterator();
while(it.hasNext()){
System.out.print(it.next()+",");
}
System.out.println();
while(it.hasPrevious()){
System.out.print(it.previous()+",");
}
}
}
Day 4:集合——迭代器与List接口的更多相关文章
- 集合迭代器快速失败行为及CopyOnWriteArrayList
		
以下内容基于jdk1.7.0_79源码: 什么是集合迭代器快速失败行为 以ArrayList为例,在多线程并发情况下,如果有一个线程在修改ArrayList集合的结构(插入.移除...),而另一个线程 ...
 - Java集合框架之Collection接口
		
Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...
 - java 集合框架(二)Iterable接口
		
Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...
 - Java集合框架之四大接口、常用实现类
		
Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...
 - 集合框架之List接口
		
有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 与 set 不同,列表 ...
 - -1-3  java集合框架基础    java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念   Properties 集合 迭代器
		
集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别? A:长度区别 ...
 - Java精选笔记_集合【List(列表)接口】
		
List(列表)接口 简介 List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合. 元素是有序的,即元素的存入顺序和取出顺序一致, ...
 - Java集合----概述、Collection接口、Iterator接口
		
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...
 - Java集合框架之Set接口浅析
		
Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...
 
随机推荐
- arm linux 移植 OpenCV
			
背景: 由于学习了摄像头有关的开发,顺理成章地接触了这个部分. 搭建环境 openCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake. OpenCV : v4.2
 - 设备树DTS 学习: uboot 传递 dtb 给 内核
			
背景 得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用. (高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树) Linux 内 ...
 - Elasticsearch的快速使用——Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch的数据
			
我主要是给出一些方向,很多地方没有详细说明.当时我学习的时候一直不知道怎么着手,花时间找入口点上比较多,你们可以直接顺着方向去找资源学习. 如果不是Spring Boot项目,那么根据Elastics ...
 - PE文件结构体-IMAGE_SECTION_HEADER
			
在PE文件头与原始数据之间存在一个区块表(Section Table),它是一个IMAGE_SECTION_HEADER结构数组, 区块表包含每个块在映像中的信息(如位置.长度.属性),分别指向不同的 ...
 - DB2的常用指令
			
注:大写的是固定的,小写的根据自己的实际情况 首先进入 命令窗口, win+r ---> 输入 db2cmd db2 1. 删除数据库 UNCATALOG DB db_name --db_nam ...
 - Android拷贝工程不覆盖原工程的配置方法
			
http://www.2cto.com/kf/201203/125131.html 在Eclipse中改包名的时候选择refactor-->rename,勾选Rename subpackages ...
 - gem5-gpu 运行 PARSEC2.1
			
PARSEC是针对共享内存多核处理器(CPU)的一套基准测试程序,详细介绍见wiki:http://wiki.cs.princeton.edu/index.php/PARSEC,主要参考:http:/ ...
 - AS3.0判断数组中最大值
			
function getMax(Arr) { if (typeof Arr !="object") { return null; } for (var i=0,max= ...
 - [强网杯 2019]Upload
			
0x00 知识点 代码审计,PHP 反序列化. 0x01 解题 先注册一个账号,再登陆 上传 简单测试一下: 只能上传能被正常查看的 png. F12看到文件上传路径 扫扫敏感文件 存在:/www.t ...
 - HDU - 6000 Wash(优先队列+贪心)
			
题意:已知有L件衣服,M个洗衣机,N个烘干机,已知每个机器的工作时间,且每个机器只能同时处理一件衣服,问洗烘完所有衣服所需的最短时间. 分析: 1.优先队列处理出每件衣服最早的洗完时间. 2.优先队列 ...