collection接口之list子接口详解

1、collection接口之子接口视图

在这里插入图片描述

2、collection接口

是list集合和set集合的父接口,但不是map父接口

3、list接口

特点:

有序,元素可以重复

三种遍历方式:

1、for(取下标)
2、foreach
3、迭代器(Iterator)

4、ArrayList集合

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

5、Vector集合

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

6、LinkedList集合

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

特有方法:

1、addfirst addlast
2、getfirst getlast
3、removefirst removelast

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

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

用迭代器遍历arraylist
package com.zhuyuncong.list;

/**
 * arraylist中的特有方法 迭代器
 */
import java.util.ArrayList;
import java.util.Iterator;

public class CollectionDemo {
	public static void main(String[] args) {
		ArrayList al=new ArrayList<>();
		al.add("aaa");
		al.add("bbb");
		al.add("ccc");
		al.add("ddd");
		al.add("eee");
		
		Iterator iterator = al.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}
结果

在这里插入图片描述

堆栈(先进后出)
如图:

在这里插入图片描述

代码如下
package com.zhuyuncong.list;

import java.util.Iterator;
import java.util.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());
		}
	}
}
结果:

在这里插入图片描述

队列(先进先出)
如图:

在这里插入图片描述

代码如下
package com.zhuyuncong.list;

import java.util.Iterator;
import java.util.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.addLast(obj);
	}
	
	//取
	public Object pop() {
		return ll.removeFirst();
	}
	
	public void bianli() {
		Iterator it = ll.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}
结果:

在这里插入图片描述

堆栈与队列的代码区别在于增加第一个和最后一个
ArrayList去重复(String对象)

一个容器中有若干元素,如果其中有俩个元素相同,
写一个去重复的方法,传入的属性为旧容器,
然后创建一个新容器,遍历旧容器,判断新容器
是否包含与旧容器一样的元素,包含就不添加,
不包含就添加。

代码如下
package com.zhuyuncong.list;

import java.util.ArrayList;

public class ArrayListRepeatDemo {

	public static void main(String[] args) {
		ArrayList al= new ArrayList<>();
		al.add("aa");
		al.add("bb");
		al.add("cc");
		al.add("dd");
		al.add("aa");
		
		ArrayList newAll=repeatList(al);
		//旧容器长度
		System.out.println(al.size());
		//新容器长度
		System.out.println(newAll.size());
	}

	private static ArrayList repeatList(ArrayList al) {
		// TODO Auto-generated method stub
		ArrayList newAll=new ArrayList<>();
		for (Object obj : al) {
			if(!newAll.contains(obj)) {
				newAll.add(obj);
			}
		}
		return newAll;
	}
}

结果:

在这里插入图片描述

ArrayList去重复(自定义对象)
package com.zhuyuncong.list;

import java.util.ArrayList;

public class ArrayListRepeatDemo {

	public static void main(String[] args) {
		ArrayList al= new ArrayList<>();
//		al.add("aa");
//		al.add("bb");
//		al.add("cc");
//		al.add("dd");
//		al.add("aa");
		al.add(new Person("aa","18"));
		al.add(new Person("bb","22"));
		al.add(new Person("cc","21"));
		al.add(new Person("dd","18"));
		al.add(new Person("aa","18"));
		
		ArrayList newAll=repeatList(al);
		System.out.println(al.size());
		System.out.println(newAll.size());
	}

	private static ArrayList repeatList(ArrayList al) {
		// TODO Auto-generated method stub
		ArrayList newAll=new ArrayList<>();
		for (Object obj : al) {
			if(!newAll.contains(obj)) {
				newAll.add(obj);
			}
		}
		return newAll;
	}
}
class Person{
	private String name;
	private String age;
	public Person() {}
	public Person(String name, String age) {
		super();
		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 String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		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;
	}
}
contains方法会自动调用equals方法

结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值