import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
* Collections:
* 面试题:Collection和Collections有什么区别?
* Collection是集合体系的最顶层,包含了集合体系的共性
* Collections是一个工具类,方法都是用于操作Collection
*
*/
public class CollectionsDemo {
public static void main(String[] args) {
//static void swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
Collections.swap(list, 0, 1);
System.out.println(list);
}
private static void method6() {
//static void sort(List<T> list) :按照列表中元素的自然顺序进行排序
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(3);
list.add(2);
Collections.sort(list);
System.out.println(list);
}
private static void method5() {
//static void shuffle(List list):傻否,随机置换
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Collections.shuffle(list);
System.out.println(list);
}
private static void method4() {
//static void reverse(List list) :反转
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Collections.reverse(list);
System.out.println(list);
}
private static void method3() {
//static void fill(List list, Object obj) :使用指定的对象填充指定列表的所有元素
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
System.out.println(list);
Collections.fill(list, "android");
System.out.println(list);
}
private static void method2() {
//static void copy(List dest, List src) :是把源列表中的数据覆盖到目标列表
//注意:目标列表的长度至少等于源列表的长度
//创建源列表
List<String> src = new ArrayList<String>();
src.add("hello");
src.add("world");
src.add("java");
//创建目标列表
List<String> dest = new ArrayList<String>();
dest.add("java");
dest.add("java");
dest.add("java");
dest.add("java");
Collections.copy(dest, src);
System.out.println(dest);
}
private static void method() {
//static int binarySearch(List list, Object key) 使用二分查找法查找指定元素在指定列表的索引位置
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
int index = Collections.binarySearch(list, 4);
System.out.println(index);
}
}
1.1 斗地主案例
具体规则:
1. 组装54张扑克牌
2. 将54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌、底牌
import java.util.ArrayList;
import java.util.Collections;
/*
* 模拟斗地主发牌
买牌
洗牌
发牌
*/
public class CollectionsTest {
public static void main(String[] args) {
//买牌
String[] arr = {"黑桃","红桃","方片","梅花"};
String[] arr2 = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
ArrayList<String> box = new ArrayList<String>();
//添加每张牌
for (int i = 0; i < arr.length; i++) {
//获取每一个花色
for (int j = 0; j < arr2.length; j++) {
//获取每一个数
box.add(arr[i] + arr2[j]);
}
}
box.add("大王");
box.add("小王");
//System.out.println(box.size());
//洗牌
Collections.shuffle(box);
//System.out.println(box);
//发牌
ArrayList<String> 林志玲 = new ArrayList<String>();
ArrayList<String> 林心如 = new ArrayList<String>();
ArrayList<String> 舒淇 = new ArrayList<String>();
//留三张底牌给地主
for (int i = 0; i < box.size() - 3; i++) {
/*
* i = 0;i % 3 = 0;
* i = 1;i % 3 = 1;
* i = 2;i % 3 = 2;
* i = 3;i % 3 = 0;
* i = 4;i % 4 = 1;
* i = 5;i % 5 = 2;
*/
if(i % 3 == 0) {
林志玲.add(box.get(i));
}
else if(i % 3 == 1) {
林心如.add(box.get(i));
}
else if(i % 3 == 2) {
舒淇.add(box.get(i));
}
}
System.out.println("林志玲:" + 林志玲);
System.out.println("林心如:" + 林心如);
System.out.println("舒淇:" + 舒淇);
System.out.println("底牌:");
/* System.out.println(box.get(box.size() - 1));
System.out.println(box.get(box.size() - 2));
System.out.println(box.get(box.size() - 3));*/
for (int i = box.size() - 3; i < box.size(); i++) {
System.out.println(box.get(i));
}
}
}
个人积累:
import java.util.ArrayList;
import java.util.*;
/*
* Collections:
* Collection和Collections有什么区别?
* Collection是集合体系的最顶层,包含了集合体系的共性
* Collections是一个工具类,方法都是用于操作Collection
*
*/
public class CollectionsDemo {
public static void main(String[] args) {
List <Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
int index=Collections.binarySearch(list,4);
System.out.println(index);//3
/*
* copy()函数,把原列表中的数据覆盖到目标列表
* 对于copy和fill问题。注意函数的长度问题。
*/
//创建目标函数
List<Integer> dst=new ArrayList<Integer>();
dst.add(0);
dst.add(0);
dst.add(0);
dst.add(0);
dst.add(0);
dst.add(0);
Collections.copy(dst,list);
//dst=[1, 2, 3, 4, 5, 6]
//list=[1, 2, 3, 4, 5, 6]
System.out.println("dst="+dst);
System.out.println("list="+list);
//创建目标列表
List<Integer> destList=new ArrayList<Integer>();
destList.add(1);
destList.add(2);
destList.add(3);
destList.add(4);
destList.add(5);
Collections.fill(destList, 1111);//将列表中的内容全部替换成111
System.out.println("destlist="+destList);
//destlist=[1111, 1111, 1111, 1111, 1111]
Collections.reverse(list);
System.out.println("list反转="+list);//list反转=[6, 5, 4, 3, 2, 1]
Collections.sort(list);//排序
System.out.println("list排序="+list);//list排序=[1, 2, 3, 4, 5, 6]
//默认从小到大的升序。
}
}