目录
一:Lisr集合的增删改查
1.List集合的增删改查以及遍历删除问题
package com.zhongshun.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* List集合的增删改查和遍历集合删除的问题
* @author zjjt
*
*/
public class Demo {
public static void main(String[] args) {
//实例化一个list集合
List<String> list = new ArrayList<>();
// 增加list数组 往list集合添加数据
list.add("张三");
list.add("李四");
list.add("王五");
list.add("老六");
// 删除 删除list里面的数据
//第一种 通过下标删除
list.remove(0);
System.out.println(list);
//第二种 通过数据内容删除
list.remove("张三");
System.out.println(list);
// 修改 list数组 通过下标修改属性值
list.set(0,"潘子"); //第一个值是数组下标 第二是要修改的
System.out.println(list);
// 遍历list数组
//第一种 for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//第二种 foreach 增强的for循环
for (String sa : list) {
System.out.println(sa);
}
//第三种 迭代器
Iterator<String> sa = list.iterator();
// System.out.println(sa.hasNext()); //下一行,是否还有数据
// System.out.println(sa.next());//下一行的数据
while(sa.hasNext()) {//判断下一行是否还有数据
System.out.println(sa.next());//打印出下一行的数据
}
//面试题经常问到的 最后list集合剩下什么元素?为什么?
// 会爆错 在遍历list集合的时候是不能进行增删的
for (String s : list) {
if("张三".equals(s)) {
list.remove(s);
}
}
}
}
二:ArryList与LinkedList的区别
1arraylist与linkedlist的区别
-
Arraylist:底层数据结构是数组,特点:查询修改效率高,删除增加效率低
-
LinkedList:底层数据结构是链表,特点:查询修改效率慢,删除增加快
2.LinkedList队列与堆栈的开发
特点:
堆栈:先进后出
队列:先进先出
3.实现一个队列与堆栈
package com.zhongshun.list;
import java.util.LinkedList;
/**
* 1.arraylist与linkedlist的区别
* Arraylist:底层数据结构是数组,特点:查询修改效率高,删除增加效率低
* LinkedList:底层数据结构是链表,特点:查询修改效率慢,删除增加快
*
* 2.LinkedList:堆栈与队列的开发
* 特点: 堆栈:先进后出
* 队列:先进先出
*
* @author zjjt
*
*/
public class Demo02 {
public static void main(String[] args) {
//队列 先进先出
DuiLie duiLie = new DuiLie(new LinkedList<>());
//增加
duiLie.push("张三");
duiLie.push("李四");
duiLie.push("王五");
//取出
System.out.println(duiLie.pop());
System.out.println(duiLie.pop());
System.out.println(duiLie.pop());
//堆栈 先进后出
DuiZhan duiZhan = new DuiZhan(new LinkedList<>());
//增加
duiZhan.push("张三");
duiZhan.push("李四");
duiZhan.push("王五");
//取出
System.out.println(duiZhan.pop());
System.out.println(duiZhan.pop());
System.out.println(duiZhan.pop());
}
}
//队列先进先出
class DuiLie{
private LinkedList<String> dl;
public DuiLie(LinkedList<String> dl) {
super();
this.dl=dl;
}
public void push(String s) {
dl.add(s);//往容器里添加
}
public String pop() {
return dl.remove();//拿出
}
}
//堆栈先进后出
class DuiZhan{
private LinkedList<String> dl;
public DuiZhan(LinkedList<String> dl) {
super();
this.dl=dl;
}
public void push(String s) {
dl.add(s);//往容器里添加
}
public String pop() {
return dl.removeLast();//拿出
}
}
三:List集合增长因子论证
1.List集合增长因子论证
- list集合底层是数组
- list集合底层数组的初始化容量是10、增长因子是0.5
- list集合进行优化、只需要扩大初始化容量、减少扩容的次数、进一步提到性能(根据实际情况来)
2.数组的长度是不可变的、可list集合为何能无限制的添加元素?
数组容量达到上限会进行扩容
四:List集合去重
package com.zhongshun.list;
import java.util.ArrayList;
import java.util.List;
/**
* list去重
* 底层是是重写eq方法来执行去重元素
* @author zjjt
*
*/
public class Demo03 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("张三");
System.out.println(list);
List<String> listNew = new ArrayList<>();//定义一个新list集合
for (String sa : listNew) {
if(!listNew.contains(sa)) {//判断新集合是否存在该数据不存在则往新集合里面加
listNew.add(sa);
}
}
//进行去重后的List集合
System.out.println(listNew);
}
}