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:
- List(有序,有索引,可以重复)
- ArrayList(查找多用)synchronizedList(List list)将ArrayList变成线程安全的
- LinkedList(增删多用)
- Vector(都不用)线程安全的
- Set(无序,无索引,不可以重复)
- HashSet(速度最快,不排序)重写hashcode()和equals()方法,默认用
- TreeSet(排序)compareTo()方法和compare()方法
Map:
- HashMap(速度最快,对键不排序),默认用
- TreeMap(对键排序)
迭代遍历:
- List
- 普通for循环,get()和size()
- Iterator迭代器,hasNext()和next()
- 增强for循环
- Vector中有Enumeration枚举迭代hasMore…next…方法
- Set
- Iterator迭代器,hasNext()和next()
- 增强for循环
- Map
- keySet()通过键获取值
- entrySet()通过键值对对象,获取值
删除:
- 普通for循环可以删除,但必须索引–
- 迭代器可以删除,但是必须用迭代器的remove方法,如果用集合的方法会出现并发修改异常
- 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(),必须是引用数据类型的