JAVA进阶_Collection、泛型以及斗地主实例

1 Collection集合

 A.结构
	1. List集合:有索引、可以存储重复元素、可以保证存取序列
	2. ArrayList:底层是数组实现的,查询快、增删慢
	3. LinkedList:底层是链表实现的,查询慢,增删快
	4. Set集合:无索引、不可以存储重元素、存取无序
	5. HashSet:底层是哈希表+(红黑树)实现的,无索引、不可以存储重复元素、存取无序
	6. LinkedHashSet:底层哈希表+链表实现,无索引、不可以存储重复元素
	7. 底层是底层二叉树。一般用于排序
  B.常用方法
	1. boolean add(E e);向集合中添加元素
	2. boolean remove(E e);删除集合中的某个元素
	3. void clear();清空集合所有的元素
	4. boolean contain(E e);判断集合中是否包含某个元素
	5. boolean isEmpty();判断集合中是否为空
	6. int size();获取集合的长度
	7. Object[] toArray();将集合转成一个数组

2

 /*
    java.util.Iterator接口:迭代器(对集合进行遍历)
    有两个常用的方法
        boolean hasNext() 如果仍有元素可以迭代,则返回 true。
            判断集合中还有没有下一个元素,有就返回true,没有就返回false
        E next() 返回迭代的下一个元素。
            取出集合中的下一个元素
    Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
    Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
        Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。

    迭代器的使用步骤(重点):
        1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
        2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
        3.使用Iterator接口中的方法next取出集合中的下一个元素
 */

3

  /*
    增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写
    是JDK1.5之后出现的新特性
    Collection<E>extends Iterable<E>:所有的单列集合都可以使用增强for
    public interface Iterable<T>实现这个接口允许对象成为 "foreach" 语句的目标。

    增强for循环:用来遍历集合和数组

    格式:
        for(集合/数组的数据类型 变量名: 集合名/数组名){
            sout(变量名);
        }
 */

4

import java.util.ArrayList;
import java.util.Collection;

/*
    泛型的上限限定: ? extends E  代表使用的泛型只能是E类型的子类/本身
    泛型的下限限定: ? super E    代表使用的泛型只能是E类型的父类/本身
 */
public class Demo06Generic {
    
    
    public static void main(String[] args) {
    
    
        Collection<Integer> list1 = new ArrayList<Integer>();
        Collection<String> list2 = new ArrayList<String>();
        Collection<Number> list3 = new ArrayList<Number>();
        Collection<Object> list4 = new ArrayList<Object>();

        getElement1(list1);
        //getElement1(list2);//报错
        getElement1(list3);
        //getElement1(list4);//报错

        //getElement2(list1);//报错
        //getElement2(list2);//报错
        getElement2(list3);
        getElement2(list4);

        /*
            类与类之间的继承关系
            Integer extends Number extends Object
            String extends Object
         */

    }
    // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
    public static void getElement1(Collection<? extends Number> coll){
    
    }
    // 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<? super Number> coll){
    
    }
}

5 斗地主示例

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class doudizhu {
    
    
    public static void main(String[] args) {
    
    
        //准备54张牌
        String[] color = {
    
    "♥","♠","♣","♦"};
        String[] num = {
    
    "2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        ArrayList<String> sum = new ArrayList<>();
        for (String c:color) {
    
    
            for (String n : num ) {
    
    
                sum.add(c+n);
            }
        }
        sum.add("SmallKing");
        sum.add("LargeKing");
        System.out.println("54张牌如下:");
        System.out.println(sum.toString());

        //洗牌
        Collections.shuffle(sum);
        System.out.println("洗牌如下:");
        System.out.println(sum.toString());

        //发牌
        ArrayList<String> per1 = new ArrayList<>();
        ArrayList<String> per2 = new ArrayList<>();
        ArrayList<String> per3 = new ArrayList<>();
        ArrayList<String> rest = new ArrayList<>();
        ArrayList<ArrayList> people = new ArrayList<>();
        for (int i = 0; i < 17; i++) {
    
    
            people.add(per1);
            people.add(per2);
            people.add(per3);
        }
        for (int i = 0; i < 51; i++) {
    
    
            people.get(i).add(sum.get(i));
        }
        for(int i = 51 ; i <54 ; i++) {
    
    
            rest.add(sum.get(i));
        }
        System.out.println("第一个人的牌为:");
        System.out.println(per1.toString());
        System.out.println("第二个人的牌为:");
        System.out.println(per2.toString());
        System.out.println("第三个人的牌为:");
        System.out.println(per3.toString());
        System.out.println("底牌为:");
        System.out.println(rest.toString());
    }


}

猜你喜欢

转载自blog.csdn.net/TOPic666/article/details/107790331