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. WPF:实现主应用程序单一实例运行方式总结

       本文介绍常见的实现主应用程序单一实例运行的几种方式. 方式一: public partial class App : Application { protected override void ...

  2. c# 空接合(??)运算符的运用

    相信很多人都看到??运算符,但是不一定每个人都知道它是用来做什么的,之前我也看到过很多次,但是因为一直没有去用过,所以也没有了解他的作用,今天又看到了,所以查了的MSDN,原来??运算符叫做空接合运算 ...

  3. HighCharts学习笔记

    目录 xAxis自定义时间刻度的显示 xAxis自定义时间刻度 我们先来看下HighCharts图表的xAxis对象有哪些属性(红色标记重要属性): allowDecimals: Booleancat ...

  4. iOS中的堆(heap)和栈(stack)的理解

    操作系统iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“text segment “,“stack segment ”,“heap segme ...

  5. Linq小技巧

    遍历集合ForEach: listAll.Items.Clear(); List<Users> list = DP.UsersDAO.GetInfoList(); list.ForEach ...

  6. unity项目实现“再按一次退出程序”提示功能

    unity项目,再按一次退出程序,按第一次做提示,再按一次,程序退出. float _waitTime = 2f;//前后两次按退出间隔时间 void OnGUI() { ) { GUI.Label( ...

  7. matlab实现贝塞尔曲线绘图pdf查看

    贝塞尔曲线绘图方法: %Program 3.7 Freehand Draw Program Using Bezier Splines %Click in Matlab figure window to ...

  8. C# Windows - 菜单栏和工具栏

    除了MenuStrip控件之外,还有许多控件可用于填充菜单.3个常见的控件是ToolStripMenuItem,ToolStripDropDown,和ToolStripSeparator.这些控件表示 ...

  9. python学习小结9:面向对象

    面向对象技术 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且 ...

  10. 框架优化系列文档:SVN中非版本控制文件忽略上传的设置

    对于SVN代码库,只应该上传源代码.资源文件等内容进行版本管理,通常编译后的二进制文件.程序包等生成产物是不应该放到SVN上做版本管理的.因此在svn的客户端工具中设置svn的属性:svn:ignor ...