【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(); 
    } 
}
目录
相关文章
|
10天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
20 2
|
10天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
14天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
14天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
3月前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
3月前
|
存储 Java 索引
Java 中 ArrayList 和 LinkedList 之间的区别
【8月更文挑战第22天】
110 1
|
6月前
|
存储 安全 Java
java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?
java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?
59 0
|
6月前
|
存储 安全 Java
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
153 1
|
6月前
|
存储 Java 索引
Java集合框架:ArrayList和LinkedList的区别是什么?
Java集合框架:ArrayList和LinkedList的区别是什么?
63 0
|
存储 安全 Java
【java常见的面试题】ArrayList 和 LinkedList 的区别是什么?
Java基础的面试题ArrayList 和 LinkedList 的区别是什么?