集合框架(一)List子接口

集合框架(一)List子接口

一、集合框架的由来

数据多了用对象进行存储,对象多了用集合来进行存储。
而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。
在这里插入图片描述
咱们从上图了解到,
collection接口是list集合和set集合的父接口,但不是map父接口。

今天给大家讲的是Collection接口下的List分析

二、List接口的特点:

有序,元素可以重复

且有三种遍历方式:
for(取下标)
for each
迭代器(Iterator)

ArrayList集合

数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5

Vector集合

数组结构 增删改查都慢 有连续下标 线程同步 增长因子2

LinkedList集合

链表结构 增删快,查询慢 没有连续下标

Vector和ArrayList的区别:

Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的

ArrayList和LinkedList的区别:

ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全

集合的remove方法与迭代器(Iterator)的remove方法区别

集合:删除指定元素
迭代器:删除所有元素

三、理解堆栈和队列的概念

我画个示意图供大家理解
在这里插入图片描述
在这里插入图片描述

四、使用LinkedList完成堆栈和队列

(1)堆栈:先进后出

package com.huangzhiyao.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Text {

	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());
		}
	}
}

运行结果:
在这里插入图片描述

(2)队列:先进先出

package com.huangzhiyao.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Text {
	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.addLast(obj);
	}
	public Object pop() {
		return ll.removeFirst();
	}
	public void bianli() {
		Iterator it = ll.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

运行结果:
在这里插入图片描述

注意:堆栈与队列的代码区别在于增加第一个和最后一个

五、ArrayList去重复

(1)去重复(String对象)

package com.huangzhiyao.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Text {
	public static void main(String[] args) {
		ArrayList al = new ArrayList<>();
		al.add("laomo");
		al.add("laomo");
		al.add("dabai");
		al.add("xiaoxi");
		al.add("yingying");
		
		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;
	}

}

运行结果:
在这里插入图片描述

(2)去重复(自定义对象)

package com.huangzhiyao.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Text {
	public static void main(String[] args) {
		ArrayList al = new ArrayList<>();
		al.add(new Person("laomo", "21"));
		al.add(new Person("laomo", "21"));
		al.add(new Person("dabai", "24"));
		al.add(new Person("xiaoxi", "13"));
		al.add(new Person("yingying", "18"));
		
		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;
	}
	
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44234514/article/details/94602310