1、List接口概述

        有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
        与 set 不同,列表通常允许重复的元素。
 
例子1:
package listdemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
public class ListDemo01 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 创建字符串并添加字符串
list.add("hello");
list.add("world");
list.add("java");
// 遍历集合
Iterator it = list.iterator();
while (it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
}
}
输出结果:
hello
world
java
 
例子2:
package listdemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
/*
* List集合的特点:
* 有序(存储和取出的元素一致),可重复的。
*/
public class ListDemo02 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 存储元素
list.add("hello");
list.add("world");
list.add("java");
list.add("javaee");
list.add("android");
list.add("javaee");//可重复
list.add("android");//可重复
// 遍历集合
Iterator it = list.iterator();
while (it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
}
}
输出结果:
hello
world
java
javaee
android
javaee
android
 
例子3:
package listdemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
/*
* 存储自定义对象并遍历
*/
public class ListDemo03 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 创建学生对象
Student s1 = new Student("白骨精", 30);
Student s2 = new Student("蜘蛛精", 40);
Student s3 = new Student("观音姐姐", 22);
// 把学生对象添加到集合对象中
list.add(s1);
list.add(s2);
list.add(s3);
// 遍历
Iterator it = list.iterator();
while (it.hasNext()) {
Student s = (Student) it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
}
}

输出结果:

白骨精---30
蜘蛛精---40
观音姐姐---22
 
 List集合的特有功能:
    A:添加功能
    void add(int index,Object element):在指定位置添加(插入)元素
    B:获取功能
    Object get(int index):获取指定位置的元素
    C:列表迭代器
    ListIterator listIterator():List集合特有的迭代器
    D:删除功能
    Object remove(int index):根据索引删除元素,返回被删除的元素
    E:修改功能
    Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
 
例子1:
package listdemo;
import java.util.ArrayList;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
/*
* List集合的特有功能:
* A:添加功能
* void add(int index,Object element):在指定位置添加元素
* B:获取功能
* Object get(int index):获取指定位置的元素
* C:列表迭代器
* ListIterator listIterator():List集合特有的迭代器
* D:删除功能
* Object remove(int index):根据索引删除元素,返回被删除的元素
* E:修改功能
* Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
*/
public class ListDemo04 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// void add(int index,Object element):在指定位置添加元素
// list.add("andorid");
// System.out.println("list:"+list);//list:[hello, world, java, andorid]
// list.add(3,"javaee");
// System.out.println("list:"+list);//list:[hello, world, java, javaee]
// list.add(4,"javaee");
// System.out.println("list:"+list);//IndexOutOfBoundsException: Index: 4, Size: 3
// list.add(11,"javaee");
// System.out.println("list:"+list);//IndexOutOfBoundsException: Index: 11, Size: 3
// Object get(int index):获取指定位置的元素
// System.out.println("get:"+list.get(1)); //get:world
// System.out.println("get:"+list.get(11)); //IndexOutOfBoundsException: Index: 11, Size: 3
// Object remove(int index):根据索引删除元素,返回被删除的元素
// System.out.println("remove:"+list.remove(1)); //remove:world
// System.out.println("list:"+list); //list:[hello, java]
// System.out.println("remove:" + list.remove(11)); //IndexOutOfBoundsException
// Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
System.out.println("set:"+list.set(1,"javaee")); //set:world
System.out.println("list:"+list); //list:[hello, javaee, java]
}
}

例子2:List特有的遍历方法size和get方法结合

package listdemo;
import java.util.ArrayList;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
public class ListDemo05 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
//遍历
for (int x = 0; x < list.size(); x++){
String s = (String) list.get(x);
System.out.println(s);
}
}
}

例子3:

package listdemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by gao on 15-12-14.
*/
public class ListDemo06 {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
// 创建学生对象
Student s1 = new Student("林黛玉", 18);
Student s2 = new Student("刘姥姥", 88);
Student s3 = new Student("王熙凤", 38);
// 把学生添加到集合中
list.add(s1);
list.add(s2);
list.add(s3);
// 遍历
// 迭代器遍历
Iterator it = list.iterator();
while (it.hasNext()) {
Student s = (Student) it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
System.out.println("-------------------");
for (int x = 0; x < list.size(); x++) {
Student s = (Student) list.get(x);
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
2、ListIterator接口(列表迭代器)
    · ListIterator接口的成员方法
        boolean hasPrevious()
        E previous()
    · ConcurrentModificationException
        现象
        原因
        解决方案
 
例子1:
package listiteratordemo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* Created by gao on 15-12-14.
*/
/*
* 列表迭代器:
* ListIterator listIterator():List集合特有的迭代器
* 该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
*
* 特有功能:
* Object previous():获取上一个元素
* boolean hasPrevious():判断是否有元素
*
* 注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用。
*/
public class ListIteratorDemo01 {
public static void main(String[] args) {
// 创建List集合对象
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
// ListIterator listIterator()
ListIterator lit = list.listIterator(); // 子类对象
while (lit.hasNext()) {
String s = (String) lit.next();
System.out.println(s);
}
System.out.println("-----------------");
while(lit.hasPrevious()){
String s = (String)lit.previous();
System.out.println(s);
}
}
}
输出结果:
hello
world
java
-----------------
java
world
hello
 
例子2:
package listiteratordemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* Created by gao on 15-12-14.
*/
/*
* 问题?
* 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
*
* ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
* 产生的原因:
* 迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
* 其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
* 如何解决呢?
* A:迭代器迭代元素,迭代器修改元素
* 元素是跟在刚才迭代的元素后面的。
* B:集合遍历元素,集合修改元素(普通for)
* 元素在最后添加的。
*/
public class ListIteratorDemo02 {
public static void main(String[] args) {
// 创建List集合对象
List list = new ArrayList();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// 迭代器遍历
// Iterator it = list.iterator();
//有问题!!ConcurrentModificationException
// while (it.hasNext()) {
// String s = (String) it.next();
// if ("world".equals(s)) {
// list.add("javaee");
// }
// }
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// System.out.println("list:" + list); //list:[hello, world, javaee, java]
System.out.println("-----------------");
// 方式2:集合遍历元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}
System.out.println("list:" + list); //list:[hello, world, java, javaee]
}
}
3、面试题List的子类特点:
  ArrayList:
    底层数据结构是数组,查询快,增删慢。
    线程不安全,效率高。(异步)
  Vector:(不常用)
    底层数据结构是数组,查询快,增删慢。
    线程安全,效率低。(同步)
  LinkedList:
    底层数据结构是链表,查询慢,增删快。
    线程不安全,效率高。
  List有三个儿子,我们到底使用谁呢?
    看需求(情况)。
          要安全吗?
          要:Vector(即使要安全,也不用这个了,后面有替代的
          不要:ArrayList或者LinkedList
       查询多:ArrayList
       增删多:LinkedList
 
  如果你什么都不懂,就用ArrayList。
 
 
 

Java API —— List接口&ListIterator接口的更多相关文章

  1. Java API ——Collection集合类 & Iterator接口

    对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...

  2. HBase总结(十二)Java API 与HBase交互实例

    HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...

  3. 熟练掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  4. 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

    现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...

  5. 掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  6. 将JAVA API接口 改写成 Python

    AsinSeedApi 不写注释的程序员-加密 将JAVA API接口 改写成 Python JAVA import com.alibaba.fastjson.JSON; import com.ali ...

  7. [置顶] 有关ListIterator接口的add与remove方法探究

    ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...

  8. [转]有关ListIterator接口的add与remove方法探究

    原文地址: http://www.java123.net/v/492971.html 应用案例: http://820199753.iteye.com/blog/2230032 ListIterato ...

  9. ListIterator接口,双向输出。

    1,ListIterator接口与Itreator接口的区别. 2,使用限制. 定义如下: public interface ListIterator<E>extends Iterator ...

随机推荐

  1. Golang学习笔记

    一.基础 1. Hello World程序 demo: package main import "fmt" // 注释 //注释 func main() { fmt.Printf( ...

  2. LAMP开发之环境搭建(2014.12.7在ubuntu下)

    Ubuntu下搭建LAMP环境 前言:学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我搭建的是LAMP环境,即Linux.Apache ...

  3. C# 访问控制:public、private、protected和internal

    平日工作时最常用的访问控制符是public和private,当看到prism里面大量使用protected的时候,觉得还是不太理解为啥. 所以就静下心来查找并理解了一下,这里记录下,以便回顾和交流. ...

  4. R语言基础(一) 可视化基础

    ##数据获取 x1=round(runif(100,min=80,max=100)) x2=round(rnorm(100,mean=80, sd=7)) x3=round(rnorm(100,mea ...

  5. 【转载】MySQL查询阻塞语句

    select r.trx_id waiting_trx_id, r.trx_mysql_thread_Id waiting_thread,        r.trx_query waiting_que ...

  6. java 格式化日期(DateFormat)

    import java.text.DateFormat; import java.util.Date; /** * 格式化时间类 DateFormat.FULL = 0 * DateFormat.DE ...

  7. 转:一份基础的嵌入式Linux工程师笔试题

    一. 填空题: 1. 一些Linux命令,显示文件,拷贝,删除 Ls cp rm 2. do……while和while……do有什么区别? 3. Linux系统下.ko文件是什么文件?.so文件是什么 ...

  8. java package and import

    1.Package Package类的主要作用是解决命名冲突.package中所存放的所有文件,一般分一下就分这三种 1,java程序源文件,扩展名为.java. 2,编译好的java类文件,扩展名为 ...

  9. cocos2dx中的坐标体系

    1.UI坐标系和GL坐标系 2.本地坐标与世界坐标 本地坐标是一个相对坐标,是相对于父节点或者你指明的某个节点的相对位置来说的,本地坐标的原点在参考节点的左下角 世界坐标是一个绝对的坐标,是以屏幕的左 ...

  10. JPA学习---第六节:大数据字段映射与字段延迟加载

    1.大数据字段所需的注解 @Lob ,例如: @Lobprivate String info; 在mysql中映射产生的字段的类型是longtext:在oracle中是  CLOB @Lobpriva ...