集合框架 ----Collection接口下的List分析

一、集合框架的关系简图

在这里插入图片描述

二、Conllection接口

2.1 Conllection接口是一个顶级的集合框架的接口
2.2 Conllection接口的子接口是Set和List

注意:Conllection接口不是Map集合的父接口!

三、List接口

3.1 list继承了Collection接口,是具有可以重复元素和有序的特性
3.2 list 的三种遍历方式:

  1. 根据下标,for循环遍历
  2. foreach(jdk的版本>=jdk1.5)在这里插入图片描述
  3. 迭代器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;
	}
	
}

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

感谢观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值