首先让我们通过一个思维导图了解今天的大致内容
导向
目录
1,UML
2,list集合的增删改查
3,List集合的三种遍历方式
4,LinkedList实现堆栈及队列
5,集合优化和增长因子
6,list集合的去重原理
UML是一种画图工具用例图
通过建立图形之间的各种关系(如类与类之间的关系)来描述模型.
下面分享两张用UML创作的用例图
1.list集合的特点(增删改查 有序 可重复)
代码示例(如下)
package com.dgl.lis;
import java.util.ArrayList;
/**
* 对list容器的增删改查
* 注意:
* @author zjjt
*
*/
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList
运行结果
zs
ls
ww
zl
-----------------------
zs
老六
ww
zl
老六
-----------------------
zs
zl
是基本的list集合运用
package com.dgl.lis;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList
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());
}
}
}
堆栈与队列的比较
堆栈:先进后出(有压栈大多用于购物)
队列:先进先出(一次只可取一个)
堆栈代码示例
package com.dgl.lis;
import java.util.LinkedList;
/**
* 通过linkedlist实现队列以及堆栈的容器
* @author zjjt
*
*/
public class Dome3 {
public static void main(String[] args) {
Duilie duilie = new Duilie(new LinkedList
public Duilie(LinkedList ll) {
super();
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.remove();
}
}
运行结果:
zs
ls
ww
八戒
队列代码示例
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();
}
}
运行结果:
八戒
ww
ls
zs
1、List集合底层是数组集合,是“可变数组”
2、会自动扩容,扩容因子为0.5
3、公式:容器大小*增长因子
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
*
*/
public class Dome4 {
public static void main(String[] args) throws Exception{
//String[] arr = new String[10];
//arr[11] = "zs";
//arr = new String[12];
//arr[12] = "zs";
ArrayList
for (int i = 0; i < 200; i++) {
list.add(i);
getlen(list);
}
}
private static void getlen(ArrayList
Field f = list.getClass().getDeclaredField("elementData");
f.setAccessible(true);
Object[] elementData = (Object[]) f.get(list);
System.out.println("当前集合的元素个数:"+list.size()+";当前list集合的容量是:"+elementData.length);
}
import java.util.ArrayList;
/**
* list集合去重底层原理
* 结论:去重引用对象时,底层调用的是对象的equals方法
*
*/
public class Dome5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add(new Person("aa",12));
list.add(new Person("ss",32));
list.add(new Person("dd",42));
list.add(new Person("ff",82));
list.add(new Person("gg",62));
list.add(new Person("dd",42));
System.out.println(list);//六个
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);//5个
}
public static void main2(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("aa");
list.add("ss");
list.add("dd");
list.add("ff");
list.add("gg");
list.add("dd");
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
}
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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
// @Override
// public boolean equals(Object obj) {
// System.out.println("===========equals被调用===============");
// return super.equals(obj);
// }
@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;
}
}