个人简介
大家好,我是翰慧腾。一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教。欢迎点赞+收藏+留言还在犹豫吗?就做自己吧!李
一、List系列
List系列有ArrayList、linkedList类;其特点最主要的就是有序、可重复、有索引。有序就是存储和取出的元素顺序一致,有索引就是可以通过索引操作元素,重复就是存储的元素可以重复。
List特有方法:代码演示
package Stickto;
import java.util.ArrayList;
import java.util.List;
public class List_00 {
public static void main(String[] args) {
// 用多态形式创建一个List对象
List 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]
}
}
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 l=new ArrayList<>();
l.add("小明");
l.add("小刚");
l.add("小王");
l.add("小韩");
//1.for循环遍历
for(int i=0;iSystem.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 l=new linkedList<>();
l.addFirst("第一颗子弹");
l.addFirst("第二颗子弹");
l.addFirst("第三颗子弹");
l.addFirst("第四颗子弹");
l.addFirst("第五颗子弹");
System.out.println(l);//结果:[第五颗子弹, 第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]
System.out.println(l.getFirst());//结果:第五颗子弹。此处并不会影响集合l
System.out.println(l.removeFirst());//出栈。结果:第五颗子弹
System.out.println(l.removeFirst());//出栈。结果:第四颗子弹
System.out.println(l.removeFirst());//出栈。结果:第三颗子弹
System.out.println(l.removeFirst());//出栈。结果:第二颗子弹
//队列
linkedList s=new linkedList<>();
s.addLast("第一颗子弹");
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 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");//会出现如下的报错
it.remove();
}
}
System.out.println(l);//结果:[小王, 小明]
}
}
通常删除元素:用上述代码中演示的方法,迭代器的方法删除元素(注意不是用集合的remove方法,是用迭代器的remove方法);使用for循环删除元素,但是要从最后一个元素开始删除,否则会出现删除不干净的情况。



