
家人们,咱们先看今天知识的思维导图:
目录
1、UML
2、List集合特点
3、三种遍历方式
4、LinkedList
5、增长因子论证
6、集合框架ArryList中的重复元素去重及其底层原理
使用的话,博主用的是StarUML,使用方法如下:
学框架就是为了了解容器的数据结构(增删改查)
下面有个案例可以参考一下:
package com.ps.list;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
//1,4,6,9,11,8 剔除集合中的奇数 currentModificationException
//企业中,调用第三方接口,要针对于一些数据做过滤
// 结论:做集合元素剔除,不能够在元集合遍历的时候进行操作
ArrayListls1 =new ArrayList<>();
//新增
ls1.add("1");
ls1.add("2");
ls1.add("3");
ls1.add("4");
for (String obj : ls1) {
if(Integer.valueOf(obj)%2==1) {
ls1.remove(obj);
}
}
}
}
演示代码如下:
package com.ps.list;
import java.util.ArrayList;
import java.util.Iterator;public class Demo2 {
public static void main(String[] args) {
ArrayList ls1 =new ArrayList<>();
//新增
ls1.add("1");
ls1.add("2");
ls1.add("3");
ls1.add("4");
//增强for循环
for (Object obj : ls1) {
System.out.println(obj);
}
System.out.println("=========");
for (int i = 0; i < ls1.size(); i++) {
System.out.println(ls1.get(i));
}
System.out.println("======迭代器=======");
Iterator it =ls1.iterator();
System.out.println(it.hasNext());
System.out.println(it.next());
}
}
堆栈:将LinkedList进行封装,实现堆栈先进后出的功能特点
package com.ps.list;
import java.util.LinkedList;
public class Demo3 {
public static void main(String[] args) {
Duizhan dl = new Duizhan(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());
}
}
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();
}
}
队列:将LinkedList进行封装,实现队列先进先出的功能特点
package com.cxy.list;
import java.util.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());
}
}
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();
}
}
先看代码:
package com.ps.list;
import java.lang.reflect.Field;
import java.util.ArrayList;
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
效果如下:
去重引用对象时,底层调用的 是对象的equals方法
看案例:
public class Demo5 {
public static void main(String[] args) {
ArrayList ls =new ArrayList<>();
//新增
ls.add(new Person("aa",22));
ls.add(new Person("aa",22));
ls.add(new Person("cc",41));
ls.add(new Person("bb",13));
ls.add(new Person("dd",18));
System.out.println(ls);
ArrayList ls1 =new ArrayList<>();
for (Object object : ls) {
if(!ls1.contains(object)) {
ls1.add(object);
}
}
System.out.println(ls1);
}
}
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() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@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;
}
}
效果如下:
好啦,今天的博客分享就到这里吧!感谢大家的观看,喜欢的可以点个赞支持一下博主,谢谢大家!