一、集合框架的关系简图
二、Conllection接口
2.1 Conllection接口是一个顶级的集合框架的接口
2.2 Conllection接口的子接口是Set和List
注意:Conllection接口不是Map集合的父接口!
三、List接口
3.1 list继承了Collection接口,是具有可以重复元素和有序的特性
3.2 list 的三种遍历方式:
- 根据下标,for循环遍历
- foreach(jdk的版本>=jdk1.5)
- 迭代器Iterator(原理)
3.3 list 的子类:ArrayList、Vector、LinkedList
List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别:
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别:
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
四、使用LinkedList完成堆栈和队列
示意图:
堆栈(先进后出):
public class LinkedListDemo {
public static void main(String[] args) {
DuiZhan dz=new DuiZhan();
dz.push("a");
dz.push("b");
dz.push("c");
dz.push("d");
dz.push("e");
dz.bianLi();
}
}
//堆栈
class DuiZhan{
private LinkedList ll = new LinkedList<>();
//弹栈(堆栈的存放特点,每一次都将元素放在容器的顶部)
public void push(Object obj) {
ll.addFirst(obj);
}
//压栈(堆栈的取出特点,每一次都是从容器的顶部取出元素)
public Object pop() {
return ll.removeFirst();
}
//遍历方法
public void bianLi() {
Iterator it = ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
队列(先进先出):
public class LinkedListDemo {
public static void main(String[] args) {
DuiZhan dz=new DuiZhan();
dz.push("a");
dz.push("b");
dz.push("c");
dz.push("d");
dz.push("e");
dz.bianLi();
}
}
//队列
class DuiLie{
private LinkedList ll = new LinkedList<>();
public void push(Object obj) {
ll.addLast(obj);
}
public Object pop() {
return ll.removeFirst();
}
public void bianLi() {
Iterator it = ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
五、集合框架ArrayList中的重复元素去重及其底层原理
5.1 字符串去重
package com.leiyuanlin.collection;
import java.util.ArrayList;
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList al = new ArrayList<>();
al.add("zs");
al.add("ls");
al.add("ww");
al.add("mazi");
al.add("zs");
ArrayList newAl = repeatList(al);
System.out.println(al.size());
System.out.println(newAl.size());
}
private static ArrayList repeatList(ArrayList al) {
ArrayList newAl = new ArrayList<>();
for (Object obj : al) {
if(!newAl.contains(obj)) {
newAl.add(obj);
}
}
return newAl;
}
}
}
结果:
5.2
package com.leiyuanlin.collection;
import java.util.ArrayList;
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList al = new ArrayList<>();
al.add(new Person("zs", "20"));
al.add(new Person("ls", "22"));
al.add(new Person("ww", "24"));
al.add(new Person("mazi", "25"));
al.add(new Person("zs", "20"));
ArrayList newAl = repeatList(al);
System.out.println(al.size());
System.out.println(newAl.size());
}
private static ArrayList repeatList(ArrayList al) {
ArrayList newAl = new ArrayList<>();
for (Object obj : al) {
if(!newAl.contains(obj)) {
newAl.add(obj);
}
}
return newAl;
}
}
class Person{
private String name;
private String age;
public Person() {
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person p= (Person)obj;
System.out.println(this.getName() + "----equals----" + p.getName());
return this.getName().equals(p.getName())
&& this.getAge() == p.getAge();
}
return false;
}
}
结果:
感谢观看!