Collections工具类-Queue接口-自定义堆栈(Deque接口)-Enumerration接口-Vector类

本文深入探讨了Java集合框架中的Collections工具类使用技巧,包括排序、洗牌、反转等操作,并通过实例展示了如何利用队列模拟银行业务场景及自定义堆栈的实现。同时,文章还介绍了如何使用双向队列来实现堆栈的功能。
摘要由CSDN通过智能技术生成
  1. Collections工具类的使用:
package com.bjsxt.sort.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *1、 binarySearch(List<? extends Comparable<? super T>> list, T key)   容器有序
 *2、sort(List<T> list) 
     sort(List<T> list, Comparator<? super T> c) 
 *3、reverse(List<?> list) 
  4、shuffle(List<?> list) 洗牌
  5、swap(List<?> list, int i, int j) 
 * @author Administrator
 *
 */
public class CollectionsDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<Integer> cards =new ArrayList<Integer>();
		//shuffle 洗牌 模拟斗地主
		for(int i=0;i<54;i++){
			cards.add(i); 
		}
		//洗牌
		Collections.shuffle(cards) ;
		//依次发牌
		List<Integer> p1 =new ArrayList<Integer>();
		List<Integer> p2 =new ArrayList<Integer>();		
		List<Integer> p3 =new ArrayList<Integer>();
		List<Integer> last =new ArrayList<Integer>();
		for(int i=0;i<51;i+=3){
			p1.add(cards.get(i));
			p2.add(cards.get(i+1));
			p3.add(cards.get(i+2));
		}
		//最后三张为底牌
		last.add(cards.get(51));
		last.add(cards.get(52));
		last.add(cards.get(53));
		
		System.out.println("第一个人:"+p1);
		System.out.println("第二个人:"+p2);
		System.out.println("第三个人:"+p3);
		System.out.println("底牌为:"+last);
		
		
		
		
		
	}
	//反转
	public static void test1(){
		List<Integer> list =new ArrayList<Integer>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		System.out.println(list);
		Collections.reverse(list);
		System.out.println("反转之后"+list);
	}
}

在这里插入图片描述
2. Queue接口_单向队列_模拟银行业务
在这里插入图片描述

package com.bjsxt.others.que;

import java.util.ArrayDeque;
import java.util.Queue;

/**
 * 使用队列模拟银行存款业务
 * @author Administrator
 *
 */
public class Demo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Queue<Request> que =new ArrayDeque<Request>();
		//模拟排队情况
		for(int i=0;i<10;i++){
			final int num =i;
			que.offer(new Request(){   //内置类

				@Override
				public void deposit() {
					System.out.println("第"+num+"个人,办理存款业务,存款额度为:"+(Math.random()*10000));
				}
				
			});
		}
		
		dealWith(que);		
	}
	//处理业务
	public static void dealWith(Queue<Request> que){
		Request req =null;
		while(null!=(req=que.poll())){
			req.deposit();
		}
	}

}
interface Request{
	//存款
	void deposit();
}

参考API
3. 自定义堆栈
boolean add(E e)
将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出 IllegalStateException。

void addFirst(E e)
将指定元素插入此双端队列的开头(如果可以直接这样做而不违反容量限制)。

void addLast(E e)
将指定元素插入此双端队列的末尾(如果可以直接这样做而不违反容量限制)。

boolean contains(Object o)
如果此双端队列包含指定元素,则返回 true。

Iterator descendingIterator()
返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。

E element()
获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。

E getFirst()
获取,但不移除此双端队列的第一个元素。

E getLast()
获取,但不移除此双端队列的最后一个元素。

Iterator iterator()
返回以恰当顺序在此双端队列的元素上进行迭代的迭代器。

boolean offer(E e)
将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用的空间,则返回 false。

boolean offerFirst(E e)
在不违反容量限制的情况下,将指定的元素插入此双端队列的开头。

boolean offerLast(E e)
在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。

E peek()
获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null。

E peekFirst()
获取,但不移除此双端队列的第一个元素;如果此双端队列为空,则返回 null。

E peekLast()
获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。

E poll()
获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null。

E pollFirst()
获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null。

E pollLast()
获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。

E pop()
从此双端队列所表示的堆栈中弹出一个元素。

void push(E e)
将一个元素推入此双端队列所表示的堆栈(换句话说,此双端队列的头部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出 IllegalStateException。

E remove()
获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。

boolean remove(Object o)
从此双端队列中移除第一次出现的指定元素。

E removeFirst()
获取并移除此双端队列第一个元素。

boolean removeFirstOccurrence(Object o)
从此双端队列移除第一次出现的指定元素。

E removeLast()
获取并移除此双端队列的最后一个元素。

boolean removeLastOccurrence(Object o)
从此双端队列移除最后一次出现的指定元素。

int size()
返回此双端队列的元素数。

package com.bjsxt.others.que;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 使用队列实现自定义堆栈
 * 1、弹
 * 2、压
 * 3、获取头
 * @author Administrator
 *
 * @param <E>
 */
public class MyStack<E> {
	//容器
	private Deque<E> container =new ArrayDeque<E>();   //双向队列
	//容量
	private int cap;
	public MyStack(int cap) {
		super();
		this.cap = cap;
	}
	
	//压栈
	public boolean push(E e){
		if(container.size()+1>cap){
			return false;
		}
		return container.offerLast(e);  //在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾,成功则返回true。超过容量,就不让压进去
		
	}
	//弹栈
	public E pop(){
		return container.pollLast(); //获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。
	}
	//获取
	public E peek(){
		return container.peekLast();   // 获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。
	}
	
	public int size(){
		return this.container.size();		
	}
}

package com.bjsxt.others.que;
//测试自定义堆栈
public class Demo02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MyStack<String> backHistory =new MyStack<String>(3);
		backHistory.push("www.baidu.com");
		backHistory.push("www.google.com");
		backHistory.push("www.sina.com");
		backHistory.push("www.bjsxt.cn");
		
		System.out.println("大小:"+backHistory.size());
		
		//遍历
		String item=null;
		while(null!=(item=backHistory.pop())){
			System.out.println(item);
		}
	}

}

结果:(后进先出)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

package com.bjsxt.others.en;

import java.util.Enumeration;
import java.util.Vector;

/**
 * Enumeration 的使用
 * 1、判断  hasMoreElements()
 * 2、获取 nextElement()
 * 
 * Vector 的 elements()方法
 * 
 * 
 * @author Administrator
 *
 */
public class Demo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Vector<String> vector =new Vector<String>();
		vector.add("javase");
		vector.add("html");
		vector.add("oracle");
		
		//遍历该Vector
		Enumeration<String> en =vector.elements();
		while(en.hasMoreElements()){
			System.out.println(en.nextElement());
		}
		
		
	}

}

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

在这里插入图片描述
在这里插入图片描述
类似于String.split 方法

package com.bjsxt.others.en;

import java.util.StringTokenizer;

/**
 * Enumeration 子类
 * StringTokenizer:String split() 字符串分割
 * 不支持正则表达式
 * 
 * StringTokenizer(String str, String delim) 

 * @author Administrator
 *
 */
public class Demo02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String emailStr="bjsxt@163.com;bjsxt@qq.com;bjsxt@sohu.com";
		StringTokenizer token =new StringTokenizer(emailStr,";");
		//遍历获取
		while(token.hasMoreElements()){
			System.out.println(token.nextElement());
		}
	}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值