个人简介
- 大家好,我是韩慧腾。一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教。💙
- 欢迎点赞+收藏+留言💜
- 还在犹豫吗?就做自己吧!🧡
一、List系列
List系列有ArrayList、LinkedList类;其特点最主要的就是有序、可重复、有索引。有序就是存储和取出的元素顺序一致,有索引就是可以通过索引操作元素,重复就是存储的元素可以重复。
List特有方法:
代码演示
package Stickto;
import java.util.ArrayList;
import java.util.List;
/*
* 讲述List特有方法
*/
public class List_00 {
public static void main(String[] args) {
// 用多态形式创建一个List对象
List<String> l=new ArrayList<>();
//为List对象添加一些元素
l.add("JAVA");
l.add("python");
l.add("HTML");
l.add("javascript");
//在某个索引处添加元素
l.add(2,"C");
System.out.println(l);//在索引值为2的地方是C元素
//用索引值删除元素,返回值是删除的元素
System.out.println(l.remove(2));//结果:C
//通过索引值获取该位置的元素
System.out.println(l.get(1));//结果:python
//修改索引位置的元素
l.set(0, "java");//把JAVA改为java,返回值是原来元素
System.out.println(l);//结果:[java, python, HTML, javascript]
l.clear();//可以调用Collectiion方法,清空集合所有元素
}
}
List集合的遍历方式:代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class List_01 {
public static void main(String[] args) {
List<String> l=new ArrayList<>();
l.add("小明");
l.add("小刚");
l.add("小王");
l.add("小韩");
//1.for循环遍历
for(int i=0;i<l.size();i++) {
String s=l.get(i);
System.out.println(s);
}
System.out.println("----------------");
//2.迭代器遍历
Iterator it=l.iterator();
while(it.hasNext()) {
String ss=(String) it.next();
System.out.println(ss);
}
System.out.println("----------------");
//3.foreach遍历
for(String i:l) {
System.out.println(i);
}
System.out.println("----------------");
//4.Lambda表达式遍历
l.forEach((s)->System.out.println(s));
}
}
ArrayList类:底层是基于数组实现的,查询元素快,增删相对慢。第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组。存满数据会进行扩容(1.5倍)
LinkedList类:底层基于双链表实现的,查询元素慢,增删首尾元素是非常快的。
LinkedList独有方法(体现在First Last):因为LinkedList方法解决首尾元素是非常方便的
package Stickto;
import java.util.LinkedList;
//数据结构可以根据现实一些情况理解
public class LinkedList_00 {
public static void main(String[] args) {
//数据结构之栈
LinkedList<String> l=new LinkedList<>();
l.addFirst("第一颗子弹");//压栈API:push
l.addFirst("第二颗子弹");
l.addFirst("第三颗子弹");
l.addFirst("第四颗子弹");
l.addFirst("第五颗子弹");
System.out.println(l);//结果:[第五颗子弹, 第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]
System.out.println(l.getFirst());//结果:第五颗子弹。此处并不会影响集合l
System.out.println(l.removeFirst());//出栈API:pop。结果:第五颗子弹
System.out.println(l.removeFirst());//出栈。结果:第四颗子弹
System.out.println(l.removeFirst());//出栈。结果:第三颗子弹
System.out.println(l.removeFirst());//出栈。结果:第二颗子弹
//队列
LinkedList<String> s=new LinkedList<>();
s.addLast("第一颗子弹");//入队API:offerLast
s.addLast("第二颗子弹");
s.addLast("第三颗子弹");
s.addLast("第四颗子弹");
System.out.println(s);
//出队
System.out.println(s.removeFirst());//第一颗子弹
System.out.println(s.removeFirst());//第二颗子弹
System.out.println(s.removeFirst());//第三颗子弹
}
}
补充:集合的并发修改异常问题(主要是在删除元素时候)
代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class List_002 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
List<String> l=new ArrayList<>();
l.add("JAVA");
l.add("小王");
l.add("小明");
l.add("JAVA");
//迭代器删除元素,注意要用迭代器对象去remove,不能用集合.remove,否则会报错
Iterator it=l.iterator();
while(it.hasNext()) {
String ele=(String) it.next();
if("JAVA".equals(ele)) {
//l.remove("JAVA");//会出现如下的报错
/*Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
at Stickto.List_002.main(List_002.java:18)*/
it.remove();
}
}
System.out.println(l);//结果:[小王, 小明]
}
}
通常删除元素:用上述代码中演示的方法,迭代器的方法删除元素(注意不是用集合的remove方法,是用迭代器的remove方法);使用for循环删除元素,但是要从最后一个元素开始删除,否则会出现删除不干净的情况。不能用foreach遍历方式删除
版权声明:本文为weixin_65049289原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。