List系列:添加的元素是有序,可重复,有索引
ArrayList、linkedList:有序,可重复,有索引
List系列集合的底层数据结构ArrayList
有序,可重复,有索引
底层是基于数组实现的,查询元素快,增删相对慢
linkedList
有序,可重复,有索引
底层是基于双链表实现的,查询元素慢,增删首位快
ArrayList集合APIArrayList、linkedList:有序,有重复,有索引
创建一个ArrayLIst集合对象
Listlist = new ArrayList<>();//多态 list.add("");
在某个索引位置插入元素
list.add(2,"");
删除,根据索引返回值
list.remove(2);
获取值
list.get(2);
修改索引处二点元素,返回修改前内容
list.set(1,"");
截取子集合
list.sublist(开始,结束);
方式一:for循环,List多的
方式二:迭代器
方式三:foreach
方式四:lambda表达式
linkedLIst集合API在该列表开头插入指定元素
list.addFirst("");
list.push("");
将指定元素追加到此列表的末尾
list.addLast("");
返回此列表中的第一个元素
list.getFrist();
返回此列表的最后一个元素
list.getLast();
从此列表中删除并返回第一个元素
list.removeFrist();
list.pop();
从此列表删除并返回最后一个元素
list.removeLast();
栈:
linkedListstack =new linkedList<>(); //压栈 stack.addFrist("1");//stack.push("1"); stack.addFrist("2"); stack.addFrist("3"); //出栈 stack.removeFrist();//stack.pop()
队列
linkedListList遍历中的常见问题queue=new linkedList<>(); //入队 queue.addLast("1"); //出队 queue.removeF
1、迭代器遍历删除
出现的问题:删除找到的元素后,指针再向后移动,会出现漏删的问题
Iteratorit = list.iterator(); while(it.hasNext()){ String ele=it.next(); if("Java".equals(ele)){ list.remove("Java"); //删除当前对象所在元素,指针再向后移 } } System.out.println(list);
问题的解决
Iteratorit = 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或父类)
泛型的修饰范围
泛型类泛型方法泛型接口(学生/老师)泛型通配符上下限



