java 高级day2 Collection集合、泛型

1集合的概念:相较于数组,集合的长度可变,存储的内容只能是对象

2Collection接口:所有单列集合中的共性方法,所有单例集合都可以使用

        Collection的共用特性:1boolean add、2voidclear、3boolean remove、4boolean contains

                                              5boolean IsEmpty 、6 int size、7object 【】toArray()8 addAll

                                              9 shuffle 

           10 sort<List>(默认升序排序)如果排序的元素是自定义的类,那么需要在类中

                                        重写Comparable接口(先实现该接口然后再重写)接口中的中的

                                        comparaTo方法

          举例:public class Person implements Comparable<Person>{//先继承Comparable接口

                                   public int comparaTo(person o){   //将person类作为对象重写comparato方法

                                    return  this.getAge - o.getAge}//以年龄升序排序,反过来就是降序         

            11 sort<List comparator>:和上面方法的区别:使用了匿名内部类,不需要继承和重写

                Person类

   public int compare(Person person, Person t1) {//自动生成
                int result= person.getAge()-t1.getAge();//返回结果以age作为判断
                //当age相同时,返回结果以姓名首字母作为判断
                if (result==0){
                    result=person.getName().charAt(0)-t1.getName().charAt(0);
                };
                return result;
            }
        });
        System.out.println(list03);

3Collection集合的两个子类 :LIst和Set    

        1 list接口的特性:(Vector、ArrayList、LinkedList)

                            1是有序的集合(存储和取出顺序相同)2允许存储重复的元素

                            3有索引,可以使用普通的for循环遍历

         2 Set接口特性:TreeSet(无序集合)、HashSet(无序集合)、LinkHashSet(有序集合)

                            1不允许存储重复元素 2 没有索引

4Irerator接口(迭代器)作用:用于遍历Collecton(List和Set)中的元素。作用流程:判断

                                        Collection中还有没有元素,有的话继续向下取一位(boolean                                                           hasNext),返回迭代元素(next

          Iterator的使用:Collection接口中有一个方法,叫做Iterator,这个方法的返回值就是Iterator

                                    的实现类对象,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什

                                    么泛型。Iterator <集合泛型> 名称=集合名称.iterator();也是一个多态

举例 注意备注

package com.bed.javahighclass;

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

public class Collectiontest {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("b");
        coll.add("e");
        coll.add("d");
        System.out.println(coll);
        //使用迭代器
        Iterator<String> it = coll.iterator();//调用Collection方法建立Iterator迭代器
        while(it.hasNext()){//while循环,判断后面是否还有元素,就执行下一步
            String str=it.next();//拿出元素,指针向后移一位
            System.out.println(str);
        }
        System.out.println("=================");
        for(String s:coll){//使用增强for循环进行遍历
            System.out.println(s);
        }
    }
}

        注:其中的while循环也可以使用增强for循环来代替,两者都是集合的遍历方式

        增强for循环格式为: for(数据类型(同集合类型) 变量名:集合名称)底层使用的也是

        迭代器,简化了迭代器的书写。增强for循环的对象时只能是集合或数组

5泛型:public class ArrayList<E> 其中E是elements的意思,当我们不知道集合中是什么类型

            可以先使用泛型来接收数据而当创建对象时,就会确定泛型的数据类型,此时会把确定

            数据类型作为参数传递给E。(泛型E有点像一个包装箱的意思。或者百变怪?)

             泛型的作用:1避免类型转换的麻烦,存出什么类型,取出就是什么类型

                                   2把运行期异常提升到了编译期

        1定义和使用含有泛型的类:当创建对象时,就会确定泛型的数据类型

        2定义和使用含有泛型的方法:

                格式:修饰符 <泛型> 返回值类型 方法名(泛型(泛型参数)){方法体}

                在调用方法时确定泛型的数据类型

        3定义和使用含有泛型的接口:

                第一种使用方式:在接口中写上泛型<E> 在实现类中指定接口的泛型

                第二种使用方式:在接口中写上泛型<E> 在创建对象时指定接口的泛型

        4泛型的通配符:定义一个方法  参数是 就可以将任意的参数类型传进去执行方法

        5泛型的上限限定 ?extends E :使用的类型只能是E类型的子类/本身 

          泛型的下限限定 ? super  E :使用的类型只能是E类型的父类/本身 

案例  斗地主发牌

package com.bed.javahighclass;

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

public class DouDiZhu {
    public static void main(String[] args) {
        ArrayList<String> poker=new ArrayList<>();//创建这个扑克牌字符串组合
        String[] huase={"♥","♦","♣","♠"};
        String[] num={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        poker.add("大王");
        poker.add("小王");

        //将huase与num进行结合组装,用两个增强型for循环进行嵌套
        for (String h : huase) {//拿出一个花色(遍历)
            for (String n : num) {//拿出一个数值(遍历)
                //System.out.println(h+n);
                poker.add(h+n);//组装
            }
        }
        //System.out.println(poker);
        Collections.shuffle(poker);//用Collections里面的shuffle方法,将poker集合随机打乱(洗牌)   细品
        //System.out.println(poker);

        //开始发牌
        ArrayList<String> player1=new ArrayList<>();
        ArrayList<String> player2=new ArrayList<>();
        ArrayList<String> player3=new ArrayList<>();
        ArrayList<String> dipai=new ArrayList<>();

        for(int i=0;i<53;i++){
            String p=poker.get(i);
            if (i>=51){
                dipai.add(p);
            }else if(i%3==1){
                player1.add(p);
            }else if(i%3==0){
                player2.add(p);
            }else if(i%3==2){
                player3.add(p);
            }
        }
        System.out.println("玩家1"+player1);
        System.out.println("玩家2"+player2);
        System.out.println("玩家3"+player3);
        System.out.println("底牌"+dipai);
    }
}

此案例中有三个关键点

        1Collection.shuffle的用法:可以对集合进行随机顺序打乱

        2当需要对两个集合进行一一对应的组合时,可以使用两个增强for进行循环嵌套,然后相加

        3对任意个对象进行按顺序依次的发牌模型时,可使用集合的索引数%总人数

          然后根据模数来对应每个人的分配对策

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值