Java集合框架-5.Collections类

collections是集合工具类

collection是单列集合的根接口

package day18;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class Dk5Poker {

	//模拟斗地主
	public static void main(String[] args) {
		//1.买扑克,4种花色,13个数字,大小王
		String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
		String[] color = {"方片","草花","红桃","黑桃"};
		//ArrayList<String> poker = new ArrayList<String>();
		HashMap<Integer,String> hm = new HashMap<Integer, String>();
		ArrayList<Integer> list = new ArrayList<Integer>();        //存储索引值
		int index = 0;        //索引
		for (String n : num) {
			for (String col : color) {           //先取数字会从小到大排序
				hm.put(index,col.concat(n));        //生成每一张牌concat()是拼接字符串,如图所示
				list.add(index);              //将索引添加到list
				index++;
			}
		}
		hm.put(index,"小王");
		list.add(index);
		index++;
		hm.put(index,"大王");
		list.add(index);
		System.out.println(hm.size());
		
		//洗牌
		Collections.shuffle(list);
		//发牌3个人
		TreeSet<Integer> zhangsan = new TreeSet<Integer>();
		TreeSet<Integer> zhaosi = new TreeSet<Integer>();
		TreeSet<Integer> wangwu = new TreeSet<Integer>();
		TreeSet<Integer> dipai = new TreeSet<Integer>();
		
		for (int i = 0; i < list.size(); i++) {
			if (i >= list.size()-3) {      //只剩3张底牌
				dipai.add(list.get(i));    //将索引添加到treeset会自动排序,值也会排序
			}else if (i % 3 ==0) {
				zhangsan.add(list.get(i));
			}else if (i % 3 ==1) {
				zhaosi.add(list.get(i));
			}else if (i % 3 ==2) {
				wangwu.add(list.get(i));
			}
		}
		
		//看牌
		look("张三",zhangsan,hm);
		look("赵四",zhaosi,hm);
		look("王五",wangwu,hm);
		look("底牌",dipai,hm);
	}
	
	//看牌
	public static void look(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) {
		System.out.println(name+"的牌是:");
		for (Integer index : ts) {   //根据索引获取值
			System.out.print(hm.get(index)+"\t");
		}
		System.out.println();
	}

}

上述代码斗地主示意图:
在这里插入图片描述
泛型固定上边界:
在这里插入图片描述
泛型固定下边界:
在这里插入图片描述
集合总结:

Collection:

  1. List(有序,有索引,可以重复)
    1. ArrayList(查找多用)synchronizedList(List list)将ArrayList变成线程安全的
    2. LinkedList(增删多用)
    3. Vector(都不用)线程安全的
  2. Set(无序,无索引,不可以重复)
    1. HashSet(速度最快,不排序)重写hashcode()和equals()方法,默认用
    2. TreeSet(排序)compareTo()方法和compare()方法

Map:

  1. HashMap(速度最快,对键不排序),默认用
  2. TreeMap(对键排序)

迭代遍历:

  1. List
    1. 普通for循环,get()和size()
    2. Iterator迭代器,hasNext()和next()
    3. 增强for循环
    4. Vector中有Enumeration枚举迭代hasMore…next…方法
  2. Set
    1. Iterator迭代器,hasNext()和next()
    2. 增强for循环
  3. Map
    1. keySet()通过键获取值
    2. entrySet()通过键值对对象,获取值

删除:

  1. 普通for循环可以删除,但必须索引–
  2. 迭代器可以删除,但是必须用迭代器的remove方法,如果用集合的方法会出现并发修改异常
  3. for循环增强不能删除,只能迭代

数组和集合转换:

		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add("e");
		//集合转数组
		Object[] arr = list.toArray();
		String[] arr2 = list.toArray(new String[list.size()]);
        for(String s: arr2){
            System.out.println(s);
        }
		//数组转集合asList(),必须是引用数据类型的
		

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值