需求:List集合存储字符串并遍历。
List集合的特点:
有序(存储和取出的元素一致),可重复的。
package javatest;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class A {

public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();

// 创建字符串并添加字符串
list.add("hello");
list.add("world");
list.add("java");
list.add("hello1");
list.add("world2");
list.add("java3");

// 遍历数组
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
}
}
最后输出
hello
world
java
hello1
world2
java3

---------------------------------------------------------------------------------
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 static void main(String[] args){
//创建集合对象
List list = new ArrayList();

//添加元素
list.add("hello");
list.add("world");
list.add("java");

1 //void add(int index,Object element):在指定位置添加元素
list.add(1."android");//注意 索引不可越界 但是在这里可以是3 将android成为第四个元素

System.out.println("list:"+list);list:[hello,android,world,java]

2 //Object get(int index):获取指定位置的元素
System.out.println("get:"+list.get(1)); //get:world //不可越界

3 //ListIterator listIterator():List集合特有的迭代器

4 //Object remove(int index):根据索引删除元素,返回被删除的元素
System.out.println("remove:"+list.remove(1));remove:world//不可越界
System.out.println("list:"+list);list:[hello,java]

5 //Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
System.out.println("set:"+list.set(1,"javaee"));set:world
System.out.println("list:"+list);//[hello,javaee,java]
}

List集合的特有遍历功能:
size()和get()方法结合

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);
}
}

//List存储自定义对象并遍历
测试类
package javatest;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class A {

public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();

AText s1 = new AText("林黛玉", 18);
AText s2 = new AText("刘奶奶", 88);
AText s3 = new AText("王熙凤", 38);

// 把AText添加到集合中
list.add(s1);
list.add(s2);
list.add(s3);

// 迭代器遍历
Iterator it = list.iterator();
while (it.hasNext()) {
AText s = (AText) it.next();
System.out.println(s);
}

// 普通for循环
for (int x = 0; x < list.size(); x++) {
AText s = (AText) list.get(x);
System.out.println(s);
}

}

}

工具类
package javatest;

public class AText {
// 成员变量
private String name;
private int age;

// 构造方法
public AText() {
super();

}

public AText(String name, int age) {
super();
this.name = name;
this.age = age;
}

// get方法set方法
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student: [name=" + name + ",age=" + age + "]";
}

}

ListIterator的特有功能(列表迭代器):
列表迭代器:ListIterator listIterator():List集合特有的迭代器
//该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法
//特有功能:
Object previous():获取上一个元素
boolean hasPrevious():判断是否有元素

注意:ListIterator可以实现逆向遍历,但是必须先正向遍历才能逆向遍历,所以一般没意义,不使用。

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);
}

//迭代器
Iterator it = list.iterator();
while(it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}

//逆向遍历
while(lit.hasPrevious()){
String s = (String)lit.previous();
System.out.println(s);
}
}

问题:
我有一个集合,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javeee"元素,代码实现

public static void main(String[] args){
//创建List集合对象
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();
if("world".equals(s)){
list.add("javaee");
}
}
System.out.println(list);
}

结果报错了:ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
产生原因:
迭代器是依赖集合而存在的,在判断成功后,集合中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
如何解决呢?
//这两种方法都可以改集合元素,都可以避免并发修改异常的报错
A:迭代器迭代元素,迭代器修改元素。
元素是跟在刚才迭代的元素后面的。
B:集合遍历元素,集合修改元素。(普通for)
元素在最后添加的。

方式A:迭代器迭代元素,迭代器修改元素
而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);//[hello, world, javaee, java]

方式B:集合遍历元素,集合修改元素。(普通for)
for(int x<0;x<list.size();x++){
String s = (String)list.get(x);
if("world".equals(x)){
list.add("javaee");
}
}
System.out.println(list);//[hello, world, java, javaee]

List:(面试List的子类特点)
ArrayList:
底层数据结构是数组,查询块,增删慢。
线程不安全,效率高。
Vector:
底层数据是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

List有三个儿子,我们使用谁?
看需求。

安全性不好:
查询多用ArrayList
增删多用LinkedList

java集合List的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  3. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  4. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  8. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  9. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  10. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

随机推荐

  1. Go解算法07整数反转

    描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 ...

  2. 纯干货 C# 通过 RFC_READ_TABLE 读取 SAP TABLE

    SAP系统又称企业管理解决方案,是全球企业管理软件与解决方案的技术领袖,同时也是市场领导者.通过其应用软件.服务与支持,SAP持续不断向全球各行业企业提供全面的企业级管理软件解决方案. 在实际开发过程 ...

  3. Oracle 11g中创建实例

    1.打开“所有程序” -> “Oracle -OraDb11g_home1” -> “配置移植工具” -> “Database Configuration  Assistant”. ...

  4. coding++:Spring Boot全局事务解释及使用(一)

    Spring 事务的入口: TxAdviceBeanDefinitionParser 解释 <tx:advice/> 这里将解析tx的配置. @Override protected Cla ...

  5. Go相关面试题目总结(日常更新)

    1.go的深拷贝与浅拷贝 深拷贝 会赋值全部的内容 内容一样但是地址不一样 修改任何一个后地址不一样 内容也会一样 changeName(h1)对象传到函数里面也是深拷贝 b := a 这是深拷贝 会 ...

  6. 7.Maven命令

    在eclipse中运行maven 一.首先要对pom.xml文件右键→Run As→Maven build 二.输入Maven命令 三.常见的Maven命令有: [1]clean 清理 [2]comp ...

  7. K-Folds cross-validator-K折交叉验证实现

    源码: import numpy as np from sklearn.model_selection import KFold X = np.array([[, ], [, ], [, ], [, ...

  8. Spring ApplicationContext 容器

    Spring ApplicationContext 容器 Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文. Application Con ...

  9. java+lodop+vue+热敏打印机,打印图片

    1.根据需求生成图片模板,详情见 https://www.cnblogs.com/xiaokangk/p/11151774.html 2.下载lodop并进行安装(安装步骤详情百度) 3.安装热敏打印 ...

  10. 1039 Course List for Student (25分)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists o ...