美文网首页
Java 常用工具-集合

Java 常用工具-集合

作者: ttlidx | 来源:发表于2020-03-18 09:47 被阅读0次

    1.集合简介

    什么是集合?

    简称集,是用来存储多个元素的容器

    集合和数组的区别

    1.元素类型

    集合:引用类型(存储基本类型是自动装箱)

    数组:基本类型,引用类型

    2.元素个数

    集合:不固定,可以任意扩容

    数组:固定,不能改变容量

    集合的好处

    不受容器大小限制,可以随时添加、删除元素,提供大量操作元素的方法(判断、获取)

    Java的集合体系

    1.单列集合(Collection)

    List:ArrayList

    Set:HashSet

    2.双列集合(Map:key,value)

    Map:HashMap

    2.List集合的特点和应用

    List集合的特点

    可重复、有序(存取顺序相同)

    应用:

    List list = new ArrayList();

    案例:List集合的简单使用

    需求:向List集合中添加三个元素,并遍历打印

    分析:

    A:向集合中添加元素的方法:add()

    B:遍历集合的反思:for循环

    C:获取集合中的元素个数的方法:size()

    步骤:

    1.创建集合对象:

    List list = new ArrayList();

    2.分别创建三个Student对象

    3.使用add方法将Student对象添加到集合中

    4.使用for循环遍历集合并打印

    //定义一个学生类

    public class Student {

        //成员变量

        //姓名

        private Stringname;

        //年龄

        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;

        }

        @Override

        public String toString() {

            return "Student{" +

            "name='" +name +'\'' +

            ", age=" +age +

            '}';

        }

    }

    //测试类

    import java.util.ArrayList;

    import java.util.List;

    /**

    *案例:List集合的简单使用

    * 需求:向List集合中添加三个元素,并遍历打印

    *

    * 分析:

    * A:向集合中添加元素的方法:add()

    * B:遍历集合的反思:for循环

    * C:获取集合中的元素个数的方法:size()

    *

    * 步骤:

    * 1.创建集合对象:

    * List list = new ArrayList();

    * 2.分别创建三个Student对象

    * 3.使用add方法将Student对象添加到集合中

    * 4.使用for循环遍历集合并打印

    *

    * 使用集合的步骤:

    * 1.创建集合对象

    * 2.创建元素对象

    * 3.将元素对象添加到集合中

    * 4.遍历集合

    *

    */

    public class Test {

        public static void main(String[] args) {

            //1.创建集合对象

            List list =new ArrayList();

            //2.创建三个元素对象

            Student s1 =new Student("张三",12);

            Student s2 =new Student("李四",15);

            Student s3 =new Student("王二",13);

            //3.将元素添加到集合中

            list.add(s1);

            list.add(s2);

            list.add(s3);

            //打印list

            System.out.println(list);

            System.out.println("-----------");

            //获取索引为2的元素

            Object obj = list.get(2);

            System.out.println(obj);

            System.out.println("----------");

            //获取集合元素的个数

            int size = list.size();

            System.out.println("集合的长度:"+size);

            System.out.println("----------");

            //遍历集合

            for (int i =0; i

                //获取元素

                Object obj2 =list.get(i);

                System.out.println("索引为"+i+"的元素:"+obj2);

            }

        }

    }

    运行结果

    3.增强for循环和迭代器

    为什么需要增强for循环

    简化数组和集合的遍历

    增强for循环的格式

    for(数据类型 变量名:数组或者集合对象){

    //循环体,变量即元素

    }

    例子:

    import java.util.ArrayList;

    import java.util.List;

    //测试类

    //案例:演示增强for循环

    //快捷方式:iter+回车 生成增强for的格式

    /**

    * 注意:

    * 增强for的底层依赖的是迭代器(Iterator)

    * 增强for就是迭代器的简写

    */

    public class Test {

        public static void main(String[] args) {

            //需求:通过增强for遍历集合List

            //1.创建集合对象

            List list =new ArrayList();

            //2.创建元素对象

            //3.将元素对象添加到集合中

            list.add(10);

            list.add(20);

            list.add(30);

            list.add(40);

            //4.遍历元素对象

            for (Object obj : list){

                //obj是集合中的元素,其本身是Integer类型的数据

                Integer i1 = (Integer) obj;

                System.out.println(i1);

            }

            for (Object o : list) {

                System.out.println(o);

            }

        }

    }

    运行结果:

    为什么需要迭代器?

    对过程的重复,成为迭代

    列表迭代器是遍历Collection集合的通用方式,可以在对集合遍历的同时进行添加、删除等操作

    迭代器的常用方法

    ·next():返回迭代的下一个元素对象

    ·hasNext如果仍有元素可以迭代,则返回true

    例子:

    import java.util.ArrayList;

    import java.util.List;

    import java.util.ListIterator;

    //测试类

    //测试列表迭代器

    public class Test2 {

        public static void main(String[] args) {

            //需求:判断如果集合有字符串b,就在它后面添加新的字符串:java

            //1.创建集合对象

            List list =new ArrayList();

            //2.创建元素对象

            //3.向集合添加元素

            list.add("a");

            list.add("b");

            list.add("c");

            list.add("d");

            //根据集合对象获取其对象的迭代器对象

            ListIterator it = list.listIterator();

            //2.判断迭代器中是否有元素

            while (it.hasNext()){//如果it中有元素就一种迭代

                //3.如果有就获取元素

                String s = (String)it.next();

                if("b".equals(s)){//这样写可以避免空指针异常

                    //list.add("java");//必须用列表迭代器

                    it.add("java");

                }

                System.out.println(s);

            }

        }

    }

    运行结果:

    4.泛型简介

    什么是泛型?

    即泛指任意类型,又叫参数化类型

    对具体类型的使用起到辅助作用,类似于方法的参数

    集合类泛型的解释

    表示该集合中存放指定类型的元素

    泛型的好处

    类型安全

    避免了类型转换

    5.Collections工具类

    简介

    针对于集合进行操作的工具类

    成员方法

    ·sort(List<T>)

    根据元素的自然顺序,将指定列表按升序排列

    ·max(Collection<T>)

    返回集合的最大元素

    ·reverse(List<T>)

    f反转List集合元素

    ·shuffle(List<T>)

    使用默认的随机源随机置换指定的列表

    例子:

    //测试类

    import java.util.ArrayList;

    import java.util.Collections;

    import java.util.List;

    /**

    *成员方法

    * ·sort(List<T>)

    * 根据元素的自然顺序,将指定列表按升序排列

    * ·max(Collection<T>)

    * 返回集合的最大元素

    * ·reverse(List<T>)

    * f反转List集合元素

    * ·shuffle(List<T>)

    * 使用默认的随机源随机置换指定的列表

    *

    */

    public class Test {

        public static void main(String[] args) {

            //1.创建集合

            List list =new ArrayList<>();

            //2.向集合添加数据

            list.add(1);

            list.add(3);

            list.add(3);

            list.add(5);

            list.add(5);

            list.add(4);

            //3.打印集合

            System.out.println("没有操作之前list中的数据:"+list);

            System.out.println("--------------------");

            //获取集合中最大元素

            Integer max = Collections.max(list);

            System.out.println("集合中最大的元素:"+max);

            System.out.println("--------------------");

            //对集合进行升序排列

            Collections.sort(list);

            System.out.println("升序后的结果为:"+list);

            System.out.println("--------------------");

            //对集合进行反转

            Collections.reverse(list);

            System.out.println("集合进行反转的结果:"+list);

            //随机置换,相当于洗牌

            Collections.shuffle(list);

            System.out.println("随机洗牌后的结果:"+list);

        }

    }

    运行结果:

           


    6.Set集合的特点

    特点:

    不可重复,无序

    应用:

    Set<T>set = new HashSet<>();

    案例:Set集合的简单使用

    需求:向Set集合中添加5个元素,并遍历打印

    分析:

    A.向集合中添加元素的方法:add()

    B.遍历集合的方式:迭代器

    步骤:

    1.创建集合对象

    Set<Student> set = new HashSet<>();

    2.分别创建5个Student对象

    3.使用add方法将Student对象添加到集合中

    4.使用迭代器遍历集合并打印,注意添加顺序和打印顺序是否相同

    import java.util.Objects;

    //定义学生类

    public class Student {

        //成员变量

        private Stringname;

        private int age;

        //构造方法

        public Student(String name,int age) {

            this.name = name;

            this.age = age;

        }

        public Student() {

        }

        //成员方法

        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;

        }

        @Override

        public String toString() {

            return "Student{" +

            "name='" +name +'\'' +

            ", age=" +age +

            '}';

        }

        @Override

        public boolean equals(Object o) {

            if (this == o)return true;

            if (o ==null || getClass() != o.getClass())return false;

            Student student = (Student) o;

            return age == student.age &&

            Objects.equals(name, student.name);

        }

        @Override

        public int hashCode() {

            return Objects.hash(name,age);

        }

    }

    //测试类

    import java.util.HashSet;

    import java.util.Iterator;

    import java.util.Set;

    /**

    *案例:Set集合的简单使用

    * 需求:向Set集合中添加5个元素,并遍历打印

    * 分析:

    * A.向集合中添加元素的方法:add()

    * B.遍历集合的方式:迭代器

    *

    * 步骤:

    * 1.创建集合对象

    * Set<Student>set = new HashSet<>();

    * 2.分别创建5个Student对象

    * 3.使用add方法将Student对象添加到集合中

    * 4.使用迭代器遍历集合并打印,注意添加顺序和打印顺序是否相同

    *

    */

    public class Test {

    public static void main(String[] args) {

    //1.创建泛型集合

            Set set =new HashSet<>();

    //2.创建5个Student对象

            Student s1 =new Student("张三",12);

    Student s2 =new Student("李四",15);

    Student s3 =new Student("王二",13);

    Student s4 =new Student("张三",12);

    Student s5 =new Student("李四",15);

    //3.使用add方法将Student对象添加到集合中

            set.add(s1);

    set.add(s2);

    set.add(s3);

    set.add(s4);

    set.add(s5);

    //5.遍历并打印

            //1.打印

            System.out.println(set);

    System.out.println("----------");

    //2.通过迭代器遍历打印

            Iterator it = set.iterator();

    while (it.hasNext()){

    Student student = it.next();

    System.out.println(student);

    }

    System.out.println("----------");

    //3.通过增强for遍历打印

            for (Student student : set) {

    System.out.println(student);

    }

    }

    }

    运行结果:

    7.Map集合的特点

    特点:

    双列集合,元素键对(Entry)构成

    Key --Value

    key不可重复,value可以重复

    应用:

    Map<T1,T2>map  = new HashMap<>();

    案例:Map集合的简单使用

    需求:向Map集合中添加三个元素,并遍历打印

    分析:

    A.向map集合中添加元素的方法为:put()

    B:遍历集合的方式:

    获取所有的Key:keySet()

    遍历keySet,通过key获取value:get()

    C.遍历keySet的方法:iterator()

    步骤:

    1.创建集合对象

    Map<Integer,Student> map = new HashMap<>();

    2.创建三个Student对象

    3.使用put方法将Studdent对象添加到集合中

    4.获取所有keym并使用迭代器遍历

    import java.util.Objects;

    //学生类

    public class Student {

    //成员变量

        private Stringname;

    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;

    }

    @Override

        public String toString() {

    return "Student{" +

    "name='" +name +'\'' +

    ", age=" +age +

    '}';

    }

    @Override

        public boolean equals(Object o) {

    if (this == o)return true;

    if (o ==null || getClass() != o.getClass())return false;

    Student student = (Student) o;

    return age == student.age &&

    Objects.equals(name, student.name);

    }

    @Override

        public int hashCode() {

    return Objects.hash(name,age);

    }

    }

    //测试类

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.Map;

    import java.util.Set;

    /**

    *案例:Map集合的简单使用

    * 需求:向Map集合中添加三个元素,并遍历打印

    * 分析:

    * A.向map集合中添加元素的方法为:put()

    * B:遍历集合的方式:

    * 获取所有的Key:keySet()

    * 遍历keySet,通过key获取value:get()

    * C.遍历keySet的方法:iterator()

    * 步骤:

    * 1.创建集合对象

    * Map<Integer,Student> map = new HashMap<>();

    *

    * 2.创建三个Student对象

    * 3.使用put方法将Studdent对象添加到集合中

    * 4.获取所有keym并使用迭代器遍历

    *

    *

    *

    */

    public class Test {

    public static void main(String[] args) {

    //1.创建集合对象

            Map map =new HashMap<>();

    //2.创建三个Student对象

            Student s1 =new Student("张三",12);

    Student s2 =new Student("李四",12);

    Student s3 =new Student("王二",12);

    //3.使用put方法将Studdent对象添加到集合中

            map.put(1,s1);

    map.put(2,s2);

    map.put(3,s3);

    //根据key获取value

            Student stu = map.get(3);

    System.out.println(stu);

    System.out.println("--------------");

    //4.获取所有keym并使用迭代器遍历

            System.out.println(map);

    //4.1 获取所有key的集合

            Set set = map.keySet();

    //4.2 遍历所有key,获取每一个键

            //获取迭代器

            Iterator it = set.iterator();

    while(it.hasNext()){

    //4.3 根据key获取value

                Integer i = it.next();

    Student s = map.get(i);

    System.out.println("key:"+i +"value:"+s);

    }

    System.out.println("--------------");

    //通过增强for实现

            for (Integer i : set) {

    Student s = map.get(i);

    System.out.println("key:"+i +"value:"+s);

    }

    }

    }

    运行结果:

    8.案例:模拟斗地主发牌功能

    需求:使用一个集合对象存储一副扑克牌,将所有扑克的顺序打乱,然后分发给使用集合便是的三个玩家和底牌,并答应玩家和地盘的集合内容

    步骤:

    1.买一副扑克牌

    将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王

    2.洗牌

    使用Collections工具类的shuffle()方法打乱牌的顺序

    3.发牌

    遍历牌堆,将每一张牌分发到三个玩家中

    留三张底牌

    4.看牌

    分别打印每个玩家集合的内容

    //测试类

    import java.util.*;

    /**

    *

    *8.案例:模拟斗地主发牌功能

    *

    * 需求:使用一个集合对象存储一副扑克牌,将所有扑克的顺序打乱,然后分发给使用集合便是的三个玩家和底牌,并答应玩家和地盘的集合内容

    *

    * 步骤:

    * 1.买一副扑克牌

    * 将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王

    * 2.洗牌

    * 使用Collections工具类的shuffle()方法打乱牌的顺序

    * 3.发牌

    * 遍历牌堆,将每一张牌分发到三个玩家中

    * 留三张底牌

    * 4.看牌

    * 分别打印每个玩家集合的内容

    *

    */

    public class Test {

    public static void main(String[] args) {

    //1.将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王

            //1.1创建一个Map集合用来存储牌的编号和花色数字

            Map pukers =new HashMap<>();

    //1.2创建一个List集合来存储牌的编号

            List list =new ArrayList<>();

    //1.3生成普通牌

            //创建数字数组

            String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

    //创建花色数组

            String[] colors = {"♦","♣","♠","♥"};

    //循环生成普通牌

            int n =0;

    for (String num : nums) {

    for (String color : colors) {

    String puker = color + num;

    //System.out.println(puker);

                    pukers.put(n,puker);

    list.add(n++);

    }

    }

    //1.4生成大王,小王

            //生成小王

            pukers.put(n,"小王");

    list.add(n++);

    //生成大王

            pukers.put(n,"大王");

    list.add(n);

    System.out.println("牌的编号:"+ list);

    System.out.println("完整一副牌:"+ pukers);

    System.out.println("-----------------------------");

    //2.使用Collections工具类的shuffle()方法打乱牌的顺序

            Collections.shuffle(list);

    System.out.println("乱序的编号:"+list);

    System.out.println("-----------------------------");

    //3.遍历牌堆,将每一张牌分发到三个玩家中,留三张底牌

            //3.1创建三个玩家和底牌的集合

            List wan1 =new ArrayList<>();

    List wan2 =new ArrayList<>();

    List wan3 =new ArrayList<>();

    List dipai =new ArrayList<>();

    //3.2遍历牌堆

            for (int i =0; i

    Integer pukerNum = list.get(i);

    if(i>=list.size()-3){//判断是否是最后三张牌

                    dipai.add(pukerNum);

    }else if(i%3 ==0){//发给玩家1

                    wan1.add(pukerNum);

    }else if(i%3 ==1){//发给玩家2

                    wan2.add(pukerNum);

    }else if(i%3 ==2){//发给玩家3

                    wan3.add(pukerNum);

    }

    }

    //4.分别打印每个玩家和底牌集合的内容

            /*

    (System.out.println("wan1:"+wan1);

    System.out.println("wan2:"+wan2);

    System.out.println("wan3:"+wan3);

    System.out.println("dipai"+dipai);

    */

            System.out.println("玩家1:"+printPuker(wan1,pukers));

    System.out.println("玩家2:"+printPuker(wan2,pukers));

    System.out.println("玩家3:"+printPuker(wan3,pukers));

    System.out.println("底牌:"+printPuker(dipai,pukers));

    }

    //创建方法用来顺序查看玩家和底牌的牌

        public static String printPuker(List list , Map pukers){

    String str ="";

    //给list集合排序

            Collections.sort(list);

    //增强for的方式循环输出玩家的牌

            for (Integer integer : list) {

    str = str + pukers.get(integer)+"\t";

    }

    return str;

    }

    }

    运行结果:

    相关文章

      网友评论

          本文标题:Java 常用工具-集合

          本文链接:https://www.haomeiwen.com/subject/qaxjyctx.html