对list集合容器的增删改查
public static void main(String[] args) {
ArrayList list =new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
//查询
System.out.println(list.get(1));
for (Object obj : list) {
System.out.println(obj);
}
//修改
list.set(1, "老六");
System.out.println("--------------------");
for (Object obj : list) {
System.out.println(obj);
}
//删除
Object obj2 = list.remove(1);//返回删除的元素
System.out.println(obj2);
System.out.println("--------------------");
for (Object obj : list) {
System.out.println(obj);
}
//1,4,6,9,11,8 剔除集合中的奇数
//企业中,调用第三方接口,要针对与一些数据进行过滤
//结论:左集合元素剔除,不能够在原集合遍历的时候进行操作
ArrayList<String> list1 =new ArrayList<>();
list1.add("1");
list1.add("4");
list1.add("6");
list1.add("9");
list1.add("11");
list1.add("8");
for (String obj : list1) {
if(Integer.valueOf(obj)%2==1) {
list1.remove(obj);
}
}
注意:左集合元素剔除,不能够在原集合遍历的时候进行操作
list遍历的三种方式
public static void main(String[] args) {
ArrayList list =new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
//增强for循环
for (Object obj : list) {
System.out.println(obj);
}
System.out.println("--------------");
//利用下标
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("-------迭代器------");
Iterator it = list.iterator();
//System.out.println(it.hasNext());//判断是否有下一个
//System.out.println(it.next());//找到下一个
while(it.hasNext()) {
System.out.println(it.next());
}
}
通过LinkedList实现队列以及堆栈的容器
public class Demo3 {
public static void main(String[] args) {
//堆列
Duilie dl=new Duilie(new LinkedList<>());
//存
dl.push("zs");
dl.push("ls");
dl.push("ww");
dl.push("ll");
//取
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println("==========================");
//栈堆
Duizhan dz=new Duizhan(new LinkedList<>());
//存
dz.push("zs");
dz.push("ls");
dz.push("ww");
dz.push("ll");
//取
System.out.println(dz.pop());
System.out.println(dz.pop());
System.out.println(dz.pop());
System.out.println(dz.pop());
}
}
class Duilie{
private LinkedList ll;
public Duilie(LinkedList ll) {
super();
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.remove();
}
}
class Duizhan{
private LinkedList ll;
public Duizhan(LinkedList ll) {
super();
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.removeLast();
}
}
list集合如何进行优化
package com.xlb.list;
import java.lang.reflect.Field;
import java.util.ArrayList;import java.util.ArrayList;
/**
* list集合如何进行优化
* 增长因子
* @author 波哥
*
* list集合长度是可变的,数组长度是不可变的
* 结论1:list集合底层的数据结构是数组
* 结论2:增长因子
* 2022年6月7日 下午6:40:44
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
// String[] arr = new String[10];
// arr = new String[11];
// arr[11] = "zs";
// arr = new String[12];
// arr[12] = "zs";
ArrayList<Object> list = new ArrayList<>(100);
for (int i = 0; i < 200; i++) {
list.add(i);
getlen(list);
}
}
private static void getlen(ArrayList<Object> list) throws Exception {
Field f = list.getClass().getDeclaredField("elementData");
f.setAccessible(true);
Object[] elementData = (Object[]) f.get(list);
System.out.println("当前集合的元素个数:"+list.size()+";当前list集合的容量是:"+elementData.length);`在这里插入代码片`
}
}
list集合去重底层原理
第一种字符串判重
public static void main(String[] args) {
ArrayList list =new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
list.add("ls");
System.out.println(list);
ArrayList list1 =new ArrayList<>();
for (Object obj : list) {
if(!list1.contains(obj)) {//如果不包含就加进去
list1.add(obj);
}
}
}
第二种判断对象重复
package com.xlb.list;
import java.util.ArrayList;
/**
* list集合去重底层原理
* 结论:去重引用对象时,底层调用的是对象的equals方法
* @author 波哥
*
* 2022年6月7日 下午6:46:20
*/
public class Demo5 {
public static void main(String[] args) {
ArrayList list2 =new ArrayList<>();
//新增
list2.add(new Person("zs", 18));
list2.add(new Person("老六", 17));
list2.add(new Person("王心凌", 41));
list2.add(new Person("王心凌",41));
list2.add(new Person("ls",98));
System.out.println(list2);
ArrayList list1 =new ArrayList<>();
for (Object obj : list2) {
if(!list1.contains(obj)) {//如果不包含就加进去
list1.add(obj);
}
}
System.out.println(list1);
}
}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person() {
// TODO Auto-generated constructor stub
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
/*@Override
public boolean equals(Object obj) {
System.out.println("========equals被调用=========");
return super.equals(obj);
}*/
}