集合框架(简介、Collection方法、迭代器),接口List,Vector,LinkedList,List去重

简介:

  1. 集合框架中提供了一个内部类专门操作集合中的元素,这个内部类就是迭代器数据结构。
  2. 集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。
  3. 而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。

Collection方法与迭代器

package com.xieminglu;

import java.util.ArrayList;
import java.util.Iterator;
/*
 * 介绍集合接口中的特有方法  迭代器的使用
 * */
public class Collection {

	public static void main(String[] args) {
		ArrayList al=new ArrayList<>();
//		al.add("a");
//		al.add("b");
//		al.add("c");
//		al.add("d");
//		al.add("e");
		
		al.add(22);
		al.add(24);
		al.add(26);
		al.add(28);
		al.add(29);
		
		//三种集合形式
		/*for (Object obj : al) {
			System.out.println(obj);
		}
		for(int i=0;i<al.size();i++) {
			System.out.println(al.get(i));
		}
		Iterator it = al.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}*/
		
		//删除元素
//		Iterator<String> it = al.iterator();//实例化迭代器
//		while(it.hasNext()) {
//			String str=it.next();//读取当前集合数据元素
//			if("b".equals(str)) {
//				it.remove();
//			}else {
//				System.out.println(str+"  ");
//			}
//		}
		
		//获取偶数
		Iterator it = al.iterator();
		while(it.hasNext()) {
			int obj=(Integer)it.next();
			if(obj%2==0) {
				System.out.println(it.next());
			}
		}
	}
}

从上到下运行的结果分别为:
1.三种集合形式
在这里插入图片描述

2.删除指定元素
在这里插入图片描述
3.获取偶数
在这里插入图片描述

为了大家更能浅显易懂获取偶数这串代码小编画了张图,希望能帮助大家
在这里插入图片描述

接口List

List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。

public static void main(String[] args) {
		ArrayList al=new ArrayList<>();
		al.add(22);
		al.add(24);
		al.add(26);
		al.add(28);
		al.add(29);
		
		ListIterator it = al.listIterator();
		//顺着取
			while(it.hasNext()) {
					System.out.println(it.next());
	   }
	    //倒着取
		    while(it.hasPrevious()) {
		    	System.out.println(it.previous());
		    }
	}

输出的结果为:
在这里插入图片描述

集合框架Vector

了解它自己的特有遍历方式

public static void main(String[] args) {
		Vector v=new Vector<>();
		v.add(22);
		v.add(24);
		v.add(26);
		v.add(28);
		v.add(29);
		
		Enumeration elements = v.elements();
		while(elements.hasMoreElements()) {
			System.out.println(elements.nextElement());
		}
	}

输出的结果为:
在这里插入图片描述

集合框架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());
			}
		}
}

输出的结果为:
在这里插入图片描述
队列:

在这里插入图片描述

输出的结果为:
在这里插入图片描述

List去重

public static void main(String[] args) {
		ArrayList al=new ArrayList<>();
		al.add("a");
		al.add("b");
		al.add("c");
		al.add("d");
		al.add("a");
		
		ArrayList newal=repeatList(al);
		
		System.out.println(al.size());
		System.out.println(newal.size());
	}

	private static ArrayList repeatList(ArrayList al) {
		// TODO Auto-generated method stub
		ArrayList newal=new ArrayList<>();
		for (Object obj : al) {
			//如果这个元素包含了遍历的元素则不添加到新的集合里
			if(!newal.contains(obj)) {
				newal.add(obj);
			}
		}
		return newal;
	}

输出的结果为:
在这里插入图片描述

集合框架ArrayList中的重复元素去重及其底层原理
判断list 集合中元素是否相同,依据的是元素的equals方法
Contains调用了equals
Remove调用了equals

字符串去重
list中存储的是字符串,而string的equals方法就是比的字符串值
引用数据类型去重(相同的类型视为同一个人)
思路
1、对人进行描述,将数据封装进对象
2、将对象放入容器
3、去重
引用数据类型被调用了equals方法验证

public class ArrayLisrRepeatDemo {

	public static void main(String[] args) {
		ArrayList al=new ArrayList<>();
//		al.add("a");
//		al.add("b");
//		al.add("c");
//		al.add("d");
//		al.add("a");
		
		al.add(new person("001", "zs"));
		al.add(new person("002", "ls"));
		al.add(new person("003", "ww"));
		al.add(new person("004", "mazi"));
		al.add(new person("001", "zs"));
		
		ArrayList newal=repeatList(al);
		
		System.out.println(al.size());
		System.out.println(newal.size());
	}

	private static ArrayList repeatList(ArrayList al) {
		// TODO Auto-generated method stub
		ArrayList newal=new ArrayList<>();
		for (Object obj : al) {
			//如果这个元素包含了遍历的元素则不添加到新的集合里
			if(!newal.contains(obj)) {
				newal.add(obj);
			}
		}
		return newal;
	}
}
class person{
	private String id;
	private String name;
	public person(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public person() {
		super();
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "person [id=" + id + ", name=" + name + "]";
	}
	@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.getId().equals(p.getId()) &&
					this.getName()==p.getName();
		}
		return false;
	}
	
}

输出的结果为:
在这里插入图片描述

集合list中remove方法调用时,调用了equals方法验证
在这里插入图片描述
输出的结果为:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值