【Java基础】Collections集合概述和使用、ArrayList集合存储学生并排序及斗地主案例

简介: 【Java基础】Collections集合概述和使用、ArrayList集合存储学生并排序及斗地主案例

一、Collections概述和使用

Collection类的作用:是针对集合操作的工具类


Collection类常用方法:

方法名 说明
public static void sort(List list) 将指定的列表按升序排序
public static void reverse(List<?> list) 反转指定列表中元素的顺序
public static void shuffle(List<?> list) 使用默认的随机 

示例代码:

public class CollectionsDemo01 { 
    public static void main(String[] args) { 
        //创建集合对象 
        List<Integer> list = new ArrayList<Integer>(); 
        //添加元素 
        list.add(30); 
        list.add(20); 
        list.add(50); 
        list.add(10); 
        list.add(40); 
        //public static <T extends Comparable<? super T>> void sort•(List<T> list):将指定的列表按升序排序
         Collections.sort(list); 
        //public static void reverse•(List<?> list):反转指定列表中元素的顺序 
         Collections.reverse(list); 
        //public static void shuffle•(List<?> list):使用默认的随机源随机排列指定的列表 
        Collections.shuffle(list); 
        System.out.println(list); 
    } 
}

二、ArrayList集合存储学生并排序

需求:


ArrayList存储学生对象,使用Collections对ArrayList进行排序


代码实现:


学生类

public class Student { 
    private String name; 
    private int age; 
    public Student() { 
    }
    public Student(String name, int age) { 
        this.name = name; 
        this.age = age; 
    }
    public String getName() { 
        return name; 
    }
    public void setName(String name) { 
        this.name = name; 
    }
    public int getAge() { 
        return age; 
    }
    public void setAge(int age) { 
        this.age = age; 
    } 
}

测试类:

public class CollectionsDemo02 { 
    public static void main(String[] args) { 
        //创建ArrayList集合对象 
        ArrayList<Student> array = new ArrayList<Student>(); 
        //创建学生对象 
        Student s1 = new Student("linqingxia", 30); 
        Student s2 = new Student("zhangmanyu", 35); 
        Student s3 = new Student("wangzuxian", 33); 
        Student s4 = new Student("liuyan", 33); 
        //把学生添加到集合 
        array.add(s1); 
        array.add(s2); 
        array.add(s3); 
        array.add(s4); 
        //使用Collections对ArrayList集合排序 
        //sort•(List<T> list, Comparator<? super T> c) 
        Collections.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) { 
            System.out.println(s.getName() + "," + s.getAge()); 
        } 
    } 
}

三、斗地主案例

需求:


通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序


代码实现:

public class PokerDemo { 
    public static void main(String[] args) { 
        //创建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()方法实现 
        Collections.shuffle(array); 
        //发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收) 
        TreeSet<Integer> lqxSet = new TreeSet<Integer>(); 
        TreeSet<Integer> lySet = new TreeSet<Integer>(); 
        TreeSet<Integer> fqySet = new TreeSet<Integer>(); 
        TreeSet<Integer> dpSet = new TreeSet<Integer>();
        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("林青霞", lqxSet, hm); 
        lookPoker("柳岩", lySet, hm); 
        lookPoker("风清扬", fqySet, hm); 
        lookPoker("底牌", dpSet, 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 + " "); 
        }
        System.out.println(); 
    } 
}
目录
相关文章
|
4天前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
26 10
|
14天前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
18天前
|
设计模式 算法 Java
Java设计模式:核心概述(一)
Java设计模式:核心概述(一)
|
4天前
|
设计模式 并行计算 安全
Java面试题: 如何使用装饰器模式来增强ConcurrentHashMap的功能?在什么情况下应该使用CopyOnWriteArrayList而不是ArrayList?
Java面试题: 如何使用装饰器模式来增强ConcurrentHashMap的功能?在什么情况下应该使用CopyOnWriteArrayList而不是ArrayList?
10 0
|
4天前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
15 0
|
10天前
|
存储 Java
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
|
11天前
|
存储 缓存 NoSQL
使用Java编写高效的文件处理和存储系统
使用Java编写高效的文件处理和存储系统
|
14天前
|
存储 安全 Java
Java详解 : 单列集合 | 双列集合 | Collections类
Java详解 : 单列集合 | 双列集合 | Collections类
|
18天前
|
Java
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
8 0