
java程序员从笨鸟到菜鸟之(二十三)集合之List接口
发布日期:2021-05-08 04:34:43
浏览次数:12
分类:精选文章
本文共 6127 字,大约阅读时间需要 20 分钟。
List集合(接口)
特点:1 是一个有序的集合(存储元素和取出元素是一致的!----先进先出)
2 该集合中的元素是可以重复的
既然是接口:通多接口多态创建对象
那么今天就在了解一下List接口
实例1 遍历集合
package org.westos_01;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 用List集合存储字符串类型的元素并遍历---迭代器遍历 * List集合是一个有序的集合(存储元素和取出元素是一致的!) * 该集合中的元素是可以重复的,List也有iteration()方法 * 说明:public interface List extends Collection * * @author Orange */public class ListDemo2 { public static void main(String[] args) { //创建List集合对象 List list = new ArrayList() ; //给集合中添加元素 list.add("hello") ; list.add("world") ; list.add("java") ; list.add("java") ; list.add("javaweb") ; list.add("world") ; //获取迭代器 Iterator it = list.iterator() ; while(it.hasNext()){ String s = (String)it.next() ; System.out.println(s); } }}
List集合的特有成员方法
添加功能 void add(int index, Object element) 功能:在列表的指定位置(索引)插入指定元素 删除功能 Object remove(int index) 功能:移除列表中指定位置的元素,返回被删除的元素 获取功能 ListIterator listIterator() 功能:列表迭代器---List集合的专有遍历方式 Object get(int index) 功能:返回列表中指定位置的元素 替换功能 set(int index,Object element) 功能:用指定元素替换列表中指定位置的元素 实例2
package org.westos_02;import java.util.ArrayList;import java.util.List;public class ListDemo { public static void main(String[] args) { //创建List集合对象 List list = new ArrayList() ; //添加一些元素 //思考:如果将"1"变成1报错吗?如果不报错说明原因(jdk5后的自动拆装箱) list.add("1") ; list.add("3") ; list.add("4") ; /* 1---添加 * void add(int index, Object element)---可选操作 * 功能:在列表的指定位置插入指定元素,在指定位置前面插入一个新的元素 * 返回值类型:void * */ list.add(1, "2") ; System.out.println(list); /* 2---删除 * E(Object) remove(int index)---可选操作 * 功能:移除列表中指定位置的元素 * 返回值类型:Object--返回被删除的元素(而不是删除元素后的集合) * */ System.out.println("remove对应索引的元素:"+list.remove(2)); System.out.println("剩余的元素:"+list); //(1)出错的原因:IndexOutOfBoundsException:角标越界了(没有索引为3的元素) //System.out.println("remove:"+list.remove(3));(1) /* 3---用指定元素替换列表中指定位置(索引)的元素 * E(泛型) set(int index,Object element)---可选操作 * 功能:用指定元素替换列表中指定位置的元素 * 参数类型: * index - 要替换的元素的索引 * element - 要在指定位置存储的元素 * 返回值类型:E(泛型)以前在指定位置的元素 * */ /* 4---获取功能 * E get(int index)-- * 功能:返回列表中指定位置的元素 * 参数:集合的索引 * 返回值类型:E(泛型)--列表中指定位置的元素 * */ System.out.println("set返回的是以前在指定位置的元素 :"+list.set(1, "5")) ; System.out.println("用set替换后用get得到新位置的元素:"+list.get(1)) ;//思考:如果集合的索引不是基本类型的封装类型,返回的是?(其实主要看集合所存取的引用类型) System.out.println("list"+list); }}编译结果:
实例3
package 测试;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * List集合的遍历方式 1)toArray() 2)Collection集合中的Iterator iterator(); * 说明1:创建集合-----添加元素---size()获取集合元素个数----对集合元素进行向下转型---得到每个元素的内容---得到所需 * 说明2:创建集合-----添加元素---hasNext()判断集合是否还有元素----next()得到集合元素的引用类型,进行向下转型---得到每个元素的内容(所需) * * @author Orange */public class xianong { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 从添加元素看集合存储的类型元素,为下面的向下转型做准备(重要!!!!!!!) list.add("hello"); list.add("java"); list.add("hello"); list.add("javaweb"); list.add("hello"); list.add("python"); // 使用普通for的方法去遍历list集合,使用size()和get()相结合 for (int x = 0; x < list.size(); x++) { // 等价------Object object = list.get(x)=new String("..") ; // 需求:获取字符串内容同时,获取字符串长度 String s = (String) list.get(x); System.out.println(s + "----" + s.length()); } System.out.println("-------------------------"); // 获取迭代器对象 Iterator it = list.iterator(); while (it.hasNext()) { String s = (String) it.next(); System.out.println(s + "----" + s.length()); } }}编译结果
实例4
// listIterator方法package org.westos_02;import java.util.ArrayList;import java.util.List;import java.util.ListIterator;/** * List集合的列表迭代器(特有的listIterator方法) * ListIterator listIterator() * 列表迭代器接口中有以下几个方法: * 正向遍历: boolean hasNext() * 功能:判断是否有下一个可以迭代的元素() * Object next() * 功能:如果有可以遍历的元素,就获取这个元素 * 逆向遍历: boolean hasPrevious() * 功能:判断是否有上一个可以迭代的元素 * Object previous() * 功能:如果有上一个可以迭代的元素,就获取上一个元素 * 注意:要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义! * @author Orange */public class ListDemo3 { public static void main(String[] args) { //创建集合对象 List list = new ArrayList() ; //给集合中添加元素 list.add("我") ; list.add("爱") ; list.add("你") ; //获取列表迭代器(按适当顺序) ListIterator it = list.listIterator() ; while(it.hasNext()){ String s = (String)it.next(); System.out.print(s+" "); } System.out.println(); System.out.println("-----------------------"); while(it.hasPrevious()){ String s = (String)it.previous() ; System.out.print(s+" "); } }}编译结果
练习1
package org.westos_02;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/** *问题? * 我有一个集合,请问如果我想判断里面有没有"world"这个元素, * 如果有,我就添加一个"javaee"元素,请写代码实现 *解释:并发(同一个时间点),并行(同一个时间段) *java.util.ConcurrentModificationException *说明:并发修改异常----当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 *原因:当前我们用迭代器去遍历元素,使用集合添加的元素,对于迭代器是不知道集合添加了这个元素(加锁),所以会发生这个异常 *描述:使用迭代器去遍历集合,是不能直接集合添加元素! *解决方案(一致): * 1)使用迭代器遍历集合,使用迭代器添加元素----定义一个功能 * 2)使用集合遍历,使用集合添加元素---------定义一个功能 * @author Orange */public class ListTest { public static void main(String[] args) { //创建List集合对象 List list = new ArrayList() ; //给集合中添加元素 list.add("hello") ; list.add("world") ; list.add("java") ; //方式1---集合 collectionTraversal(list); //方式2---迭代器(对结果说明:当发现"world"就在其后面添加"javaee") listIterationTraversal(list); /* 错误的方法: 1--获取迭代器 Iterator it = list.iterator() ; 2--遍历 while(it.hasNext()){ //使用迭代器遍历 String s = (String)it.next() ; //判断 if("world".equals(s)){ //添加一个元素 list.add("javaee") ;//使用集合添加元素 } } */ } public static void listIterationTraversal(List list){ //方案1:使用迭代器遍历集合,使用迭代器添加元素(Iteration没有add()方法,无法添加元素) //Iterator it = list.iterator() ; //报错解释:该迭代器中没有添加功能,而List集合中的专有遍历方式----列表迭代器有添加功能:add(Object obj) //将指定的元素插入到列表中(指定元素后面插入) ListIterator it = list.listIterator() ; while(it.hasNext()){ String s = (String) it.next() ; if("world".equals(s)){ //使用迭代器添加 it.add("javaee") ; } } System.out.println("list:"+list); } public static void collectionTraversal(List list){ //集合遍历,集合添加元素 for(int x = 0 ; x
未完待续...
相关链接:1---,2---,3---,4---点击打开链接(知乎:细节),5---点击打开链接,6---(图),7---点击打开链接(可变长度的原理)
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月14日 13时55分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
准确率94%!Python 机器学习识别微博或推特机器人
2021-05-08
Python 元组Tuple 相对于数组List的优势
2021-05-08
Android基本知识
2021-05-08
在Java中,return null 是否安全, 为什么?
2021-05-08
命令模式【Command Pattern】
2021-05-08
如何将自己写的代码编进系统
2021-05-08
数据结构有哪些
2021-05-08
OSI 7 层网络模型
2021-05-08
Spring Bean 生命周期
2021-05-08
JDK 内置线程池
2021-05-08
JVM 参数默认值查询
2021-05-08
异常的继承结构
2021-05-08
SVN 和 Git 区别
2021-05-08
JDK 内置的多线程协作工具类的使用场景
2021-05-08
Java 源代码到运行的过程
2021-05-08
Java 中哪些对象可以获取类对象
2021-05-08
linux 的 cp 命令如何复制不提示覆盖
2021-05-08
缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性
2021-05-08
linux 的 pwd 命令
2021-05-08
linux 的 sleep 命令
2021-05-08