关于java:Collections-笔记

8次阅读

共计 3181 个字符,预计需要花费 8 分钟才能阅读完成。

Collections

Collections 概述和应用

是针对汇合操作的工具类

// 创立汇合对象
List<Integer> list = new ArrayList<Integer>();
// 增加元素
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);

// 将指定的列表按升序 (天然程序) 排序
Collection.sort(list);

// 反转列表中元素的程序
Collection.reverse(list);

// 随机排列列表中的元素
Collection.shuffle(list);

sout(list);

升序

反转

随机排序

案例 ArrayList 汇合存储学生对象并排序


学生

创立汇合对象 把学生增加到汇合

// 应用 Collections 对 ArrayList 汇合排序  利用比拟器 Comparator 进行
Collection.sort(array,new Comparator<Student>(){
    @Override
    public int compare(Student s1,Student s2){
        // 依照年龄从小到大排序
        int num = s1.getAge()-s2.getAge();
        // 年龄雷同时依照字母程序排序
        int num2 = num==0?s1.getName().CompareTo(s2.getName()):num;
        return num2;
    }
});
// 遍历汇合
for(Student s : array){sout(s.getName()+","+s.getAge());
}

输入

案例 模仿斗地主

// 创立一个牌盒,也就是定义一个汇合对象,用 Arraylist 汇合实现
Arraylist<String> array = new Arraylist<String>();
// 往牌盒外面装牌
// 方片 梅花 红桃 黑桃 大小王
// 定义花色数组
String[] colors = {"方片","梅花","红桃","黑桃"};
// 定义一个点数数组
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
// 把牌存到汇合里去 遍历花色和牌
for(String color : colors){for(String number : numbers){array.add(color+number);
    }
}
array.add("大王");
array.add("小王");

// 洗牌也就是把牌打散,用 Collections 的 shuffle()办法实现
Collections.shuffle(array);

/ 发牌,也就是遍历汇合给三个玩家发牌
// 创立三个汇合
Arraylist<String> laqArray = new Arraylist<String>();
Arraylist<String> lyArray = new Arraylist<String>();
Arraylist<String> fqyArray = new Arraylist<String>();
Arraylist<String> dpArray = new Arraylist<String>();// 留三张底牌

// 发牌
for(int i = 0,i<array.size(),i++){String poker = array.get(i);
    if(i>=array.size()-3){dpArray.add(poker);
    }else if(i%3==0){laqArray.add(poker);
    }else if(i%3==1){lyArray.add(poker);
    }else if(i%3==2){fqyArray.add(poker);
    }
}
// 看牌 三个玩家别离遍历本人的牌
lookPoker(name:"林青霞",laqArray);
lookPoker(name:"柳岩",lyArray);
lookPoker(name:"风清扬",fqyArray);
lookPoker(name:"底牌",dpArray);

// 写一个办法实现 看牌的办法
public static void lookPoker(String name,Arraylist<String> a
rray){System.out.print(name + "的牌是");
    for(String poker : array){System.out.print(poker+" ")
    }
    sout();}

后果输入

案例 模仿斗地主升级版

对拿到的牌进行排序

// 创立 HashMap 汇合,键是编号,值是牌
HashMap<Integer,String> hm = new HashMap<Integer,String>();
// 创立 ArrayList 汇合,存储编号
Arraylist<Integer> array = new Arraylist<Integer>();
// 定义花色数组
String[] colors = {"方片","梅花","红桃","黑桃"};
// 定义一个点数数组
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
// 从 0 开始王 HashMap 汇合外面存储编号,并存储对应的牌,同时往 ArrayList 外面存储编号
int index = 0;
for(String number :numbers){for(String color : colors){hm.put(index,color+number);
        array.add(index);
        index++;
    }
}
hm.put(index,"小王");
array.add(index);
index++;
hm.put(index,"大王");
array.add(index);

// 洗牌,洗得编号
Collections.shuffle(array);
// 发牌 发的是编号,为了保障编号是排序的,创立 TreeSet 汇合接管
TreeSet<Integer> lqxSet = new TreeSet<Integer>();
TreeSet<Integer> lySet = new TreeSet<Integer>();
TreeSet<Integer> fqySety = new TreeSet<Integer>();
TreeSet<Integer> dpSet = new TreeSet<Integer>();// 留三张底牌
// 通过 for 循环实现发牌
for(int i = 0,i<array.size(),i++){int x = array.get(i);
    if(i>=array.size()-3){dpSet.add(x);
    }else if(i%3==0){lqxSet.add(x);
    }else if(i%3==1){lySet.add(x);
    }else if(i%3==2){fqySet.add(x);
    }
}

// 调用看牌办法看牌
lookPoker(name:"林青霞",lqxArray,hm);
lookPoker(name:"柳岩",lyArray,hm);
lookPoker(name:"风清扬",fqyArray,hm);
lookPoker(name:"底牌",dpArray,hm);


// 定义方法来看牌 遍历 TreeSet 汇合,获取编号,到 HashMap 汇合找对应的牌
public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){System.out.print(name + "的牌是");
    for(Integer key : ts){String poker = hm.get(key);
        System.out.print(poker+" ")
    }
    sout();}

后果输入

正文完
 0