Java API —— List接口&ListIterator接口
1、List接口概述
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);
}
}
}
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);
}
}
}
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());
}
}
}
输出结果:
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());
}
}
}
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);
}
}
}
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]
}
}
Java API —— List接口&ListIterator接口的更多相关文章
- Java API ——Collection集合类 & Iterator接口
对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...
- HBase总结(十二)Java API 与HBase交互实例
HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...
- 熟练掌握HDFS的Java API接口访问
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...
- 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系
现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...
- 掌握HDFS的Java API接口访问
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...
- 将JAVA API接口 改写成 Python
AsinSeedApi 不写注释的程序员-加密 将JAVA API接口 改写成 Python JAVA import com.alibaba.fastjson.JSON; import com.ali ...
- [置顶] 有关ListIterator接口的add与remove方法探究
ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...
- [转]有关ListIterator接口的add与remove方法探究
原文地址: http://www.java123.net/v/492971.html 应用案例: http://820199753.iteye.com/blog/2230032 ListIterato ...
- ListIterator接口,双向输出。
1,ListIterator接口与Itreator接口的区别. 2,使用限制. 定义如下: public interface ListIterator<E>extends Iterator ...
随机推荐
- mvvm结构中数据的关联----wpf
1.在视图中PlotView.xaml <Button Content="<<" Height="23" HorizontalAlignmen ...
- 【转载】Powershell连接世纪互联Office365
$User = "admin@contoso.com" $PWord = ConvertTo-SecureString –String "password" – ...
- phpstorm8 设置及license key
phpstorm8 license key Learn Programming ===== LICENSE BEGIN ===== 63758-12042010 00000Ryqh0NCC73lpRm ...
- .NET中class和struct的区别
1.引言 提起class和struct,我们首先的感觉是语法几乎相同,待遇却天壤之别.历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行.在我认为,struct ...
- SQL索引优化
序言数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化.本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用 ...
- NOIP2015 心得
NOIP2015的复赛已经过去一个多星期了,成绩也已经出来了,作为一个大(ruo)山(sheng)东的蒟蒻,在学了一年之后拿到了255的成绩.这个成绩并不是很好,但也算在我的预料之内. 第一天第一题水 ...
- 显示 mac 隐藏文件
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...
- java 并发编程
闭锁 一种可以延迟线程的进度直到其到达终止状态.可以用来确保某些活动直到其他活动都完成后才继续执行 例如: 确保某个计算在其需要的所有资源都被初始化了之后才继续执行. 确保某个服务在其他依赖的服务都启 ...
- Netty 中文教程 Hello World !详解
1.HelloServer 详解 HelloServer首先定义了一个静态终态的变量---服务端绑定端口7878.至于为什么是这个7878端口,纯粹是笔者个人喜好.大家可以按照自己的习惯选择端口.当然 ...
- vs2010中臃肿的ipch和sdf文件
使用VS2010建立C++解决方案时,会生成SolutionName.sdf和一个叫做ipch的文件夹,这两个文件再加上*.pch等文件使得工程变得非常的庞大,一个简单的程序都会占用几十M的硬盘容量, ...