栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java扩展之part20 List集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java扩展之part20 List集合

List系列集合

List系列:添加的元素是有序,可重复,有索引

ArrayList、linkedList:有序,可重复,有索引

List系列集合的底层数据结构

ArrayList

有序,可重复,有索引

底层是基于数组实现的,查询元素快,增删相对慢

linkedList

有序,可重复,有索引

底层是基于双链表实现的,查询元素慢,增删首位快

ArrayList集合API

ArrayList、linkedList:有序,有重复,有索引

    创建一个ArrayLIst集合对象

    List  list = new ArrayList<>();//多态
    list.add("");
    

    在某个索引位置插入元素

    list.add(2,"");
    

    删除,根据索引返回值

    list.remove(2);
    

    获取值

    list.get(2);
    

    修改索引处二点元素,返回修改前内容

    list.set(1,"");
    

    截取子集合

    list.sublist(开始,结束);
    
List集合的遍历方式

方式一:for循环,List多的

方式二:迭代器

方式三:foreach

方式四:lambda表达式

linkedLIst集合API

    在该列表开头插入指定元素

    list.addFirst("");
    
    list.push("");
    

    将指定元素追加到此列表的末尾

    list.addLast("");
    

    返回此列表中的第一个元素

    list.getFrist();
    

    返回此列表的最后一个元素

    list.getLast();
    

    从此列表中删除并返回第一个元素

    list.removeFrist();
    
    list.pop();
    

    从此列表删除并返回最后一个元素

    list.removeLast();
    
使用linkedList创建队列和栈(双链表)

栈:

linkedList stack =new linkedList<>();
//压栈
stack.addFrist("1");//stack.push("1");
stack.addFrist("2");
stack.addFrist("3");
//出栈
stack.removeFrist();//stack.pop()

队列

linkedList queue=new linkedList<>();
//入队
queue.addLast("1");
//出队
queue.removeF
List遍历中的常见问题

1、迭代器遍历删除

出现的问题:删除找到的元素后,指针再向后移动,会出现漏删的问题

Iterator  it = list.iterator();
while(it.hasNext()){
    String ele=it.next();
    if("Java".equals(ele)){
        list.remove("Java");
        //删除当前对象所在元素,指针再向后移
    }
}
System.out.println(list);

问题的解决

Iterator  it = list.iterator();
while(it.hasNext()){
    String ele=it.next();
    if("Java".equals(ele)){
        it.remove();
        //删除当前对象所在元素,不再后移
        //使用迭代器删除当前位置的元素,保证不后移,可以成功遍历全部对象
    }
}
System.out.println(list);

2、foreach删除

出现的问题,同样也会出现漏删的问题,删除时不可以使用

for(String S :list){
	if("java".equals(S)){
        list.remove("Java");
    }
}

3、lambda表达式

出现问题,删除时不可以使用

list.forEach(s->{
    if("java".equals(s)){
        list.remove("Java");
    }
});

4、for循环,

出现问题:会漏删,但是可以修改(采用–或者倒删的方式

for(int i=0;i 

解决方式一

for(int i=lise.size();i>=0;i--){
    String ele=list.get(i);
    if("Java".equals(ele)){
        list.remove("Java");
    }
}

解决方式二

for(int i=0;i 
泛型 

MyArrayList { }

常见的泛型定义字符:EKTV

还可以使用?:一切类型

? extends Car 泛型上限(Car或子类)? Super Car 泛型下限(Car或父类)

泛型的修饰范围

泛型类泛型方法泛型接口(学生/老师)泛型通配符上下限

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号