美文网首页
Java中的集合框架

Java中的集合框架

作者: 撸码小狂魔 | 来源:发表于2017-10-14 01:23 被阅读7次

    学习了解

    1. 集合框架的概念与作用
    • 集合框架的体系结构
    • 集合框架的实际应用

    概念与作用

    集合概念:

    • 在现实生活中,很多的事物凑在一起。
    • 数学中的集合:具有共同属性的事物的总体。
    • Java中的集合类:是一种工具,就像是容器,存储任意数量的具有共同属性的对象。

    集合的作用:

    • 在类的内部,对数据进行组织;
    • 简单而快速的搜索大量的条目;
    • 有的集合接口,提供了一些列排列有序的元素,并且可以在序列中间快速的插入或则删除有关的元素;
    • 有的集合接口,提供了映射关系,可以通过任意关键字(key)去快速查找对应的唯一对象,而这个关键字是任意类型。

    集合与数组的对比——为何选择集合而不是数组?

    • 数组的长度是固定的,集合的长度可变;
    • 数组只能通过下标访问元素,类型固定(int型),数据量大时只能通过遍历来查找对象。而有的集合可以通过任意类型的关键字来查找所映射的具体对象;

    集合框架的体系结构

    集合框架由两大家族组成,分别是Collection家族和Map家族。

    Collection和Map是两个接口。是Java集合框架的根接口。

    Collection家族主要有三个子接口:分别是List(序列)、Queue(队列)、Set(集)三个接口。
    其中List、Queue存储的元素是排列有序的,可以重复的。
    Set中的元素是无序并且不能重复。

    List有一个很常用很重要的实现类: ArrayList(数组序列)。

    Queue有一个很重要的实现类:LinkedList(链表),这个LinkedList同时也是List接口的实现类。

    Set有一个重要的实现类HashSet(哈希集)

    Map家族也有众多的子接口,其中有一个很重要的实现类HashMap(哈希表)

    Collenction和Map是如何存储数据的呢?
    首先Collection存储的都是一个一个的独立对象,而Map的内部是以Key与Value两个对象(Key,Value)为一个映射来存储数据。这样一个映射就是一个Entry(键值对)类的示例,Entry类是Map的一个内部类,Key和Value可以是任何对象。

    Paste_Image.png

    可以将实现Collection接口的类所存储的数据都为一个一个的光棍(就是一个一个的对象),而实现Map接口的类所存储的是数据都为一对一对的夫妇(<Key,Value>)。

    集合框架的实际应用

    Collection接口 & List接口简介

    Collection接口、子接口以及实现类
    Collection接口:

    • List、Set和Queue接口的父接口
    • 定义了可用于操作List、Set和Queue的方法——增删改查

    List接口及其实现类——ArrayList

    • List是元素有序并且可以重复的集合,被称为序列
    • List可以精确的控制每个元素的插入位置,或者删除某个位置元素
    • ArrayList——数组序列,是List的一个重要实现类
    • ArrayList底层是由数组实现的

    范例:实现功能——模拟学生选课功能

    • 选择课程(往集合中添加课程)
    • 删除所选的某门课程
    • 查看所选课程
    • 修改所选课程

    1、创建课程类

    /**
     * 课程类
     * Created by 99479 on 2017/7/10.
     */
    public class Course {
        public String id;
        public String name;
        public Course(String id, String name) {
            this.id = id;
            this.name = name;
        }   
    }
    

    2、创建学生类

    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 学生类
     * Created by 99479 on 2017/7/10.
     */
    public class Student {
        public String id;
        public String name;
        public Set courses;
    
        public Student(String id, String name) {
            this.id = id;
            this.name = name;
            this.courses = new HashSet();
        }
    }
    

    3、ListTest类

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * 备选课程类
     * Created by 99479 on 2017/7/10.
     */
    public class ListTest {
        /**
         * 用于存放备选课程的List
         */
        public List coursesToSelect;
    
        public ListTest(){
            this.coursesToSelect  = new ArrayList();
        }
    
        /**
         * 用于往coursesToSelect中添加备选课程
         */
        public void testAdd(){
            //创建一个课程对象,并通过调用add方法,添加到备选课程List中
            Course course = new Course("1","数据结构");
            coursesToSelect.add(course);
            Course temp = (Course) coursesToSelect.get(0);//对象存入集合中都变成Object类型,取出时需要类型转换
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
    
            Course course1 = new Course("2","C语言");
            //将对象插入指定位置
            coursesToSelect.add(0,course1);
            temp = (Course) coursesToSelect.get(0);
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
    
            /**
             * 如果插入的位置大于List容器的位置,将会报错(“java.lang.IndexOutOfBoundsException: Index: 4, Size: 2”)
            Course course2 = new Course("3","test");
            coursesToSelect.add(4,course2);
             */
    
            Course [] courses = {new Course("3","离散数学"),new Course("4","汇编语言")};
            coursesToSelect.addAll(Arrays.asList(courses));
            temp = (Course) coursesToSelect.get(2);
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
            temp = (Course) coursesToSelect.get(3);
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
    
            Course [] courses1 = {new Course("5","高等数学"),new Course("6","大学英语")};
            coursesToSelect.addAll(2,Arrays.asList(courses1));
            temp = (Course) coursesToSelect.get(2);
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
            temp = (Course) coursesToSelect.get(3);
            System.out.println("添加了课程:" + temp.id +  " : "+ temp.name);
        }
    
        /**
         * 取得List中的元素的方法
         */
        public void testGet(){
            System.out.println("有如下待选课程:");
            //获取集合的大小
            int size = coursesToSelect.size();
            for (int i  = 0 ; i <size ; i++){
                Course course = (Course) coursesToSelect.get(i);
                System.out.println("课程:"+ course.id + " :"+course.name);
            }
        }
    
        /**
         * 通过迭代器来遍历list
         */
        public void testIterator(){
            //通过集合的Iterator遍历集合
            System.out.println("有如下待选课程(使用迭代器访问):");
            Iterator iterator = coursesToSelect.iterator();
            while(iterator.hasNext()){
                Course course = (Course) iterator.next();
                System.out.println("课程:"+ course.id + " :"+course.name);
            }
        }
    
        /**
         *通过for-each方法访问集合元素
         */
        public void testForEach(){
            System.out.println("有如下待选课程(使用for-each方法访问):");
            for (Object obj : coursesToSelect){
                Course course = (Course) obj;
                System.out.println("课程:"+ course.id + " :"+course.name);
            }
        }
    
        /**
         * 修改List中的元素
         */
        public void testModify(){
            System.out.println("---------------- 修改集合中指定位置的元素");
            coursesToSelect.set(4,new Course("7","毛概"));
        }
    
        /**
         * 删除List中的元素(通过传入集合中的实体对象)
         */
        public void testRemovieWithObject(){
            Course course = (Course) coursesToSelect.get(4);
            System.out.println("我是课程:"+course.id+" : "+course.name+",我即将被删除");
            coursesToSelect.remove(course);//传入的是实体对象
            System.out.println("成功删除课程!");
            testIterator();
        }
    
        /**
         * 删除List中的元素(通过传入集合中的下标)
         */
        public void testRemovieWithIndex(){
            System.out.println("我在List集合中的下标为3,我即将被删除!");
            coursesToSelect.remove(3);
            testIterator();
        }
    
        /**
         * 删除List集合中的元素(通过传入指定集合中的元素的数组)
         */
        public void testRemoviewWithArray(){
            System.out.println("通过传入指定集合中的元素的数组");
            Course [] courses = {(Course) coursesToSelect.get(0), (Course) coursesToSelect.get(1)};
            coursesToSelect.removeAll(Arrays.asList(courses));
            testIterator();
        }
    
    
    
        public static void main(String[] args) {
            ListTest listTest = new ListTest();
            listTest.testAdd();
            listTest.testGet();
            listTest.testIterator();
            listTest.testForEach();
            listTest.testModify();
            listTest.testForEach();
            listTest.testRemovieWithObject();
            listTest.testRemovieWithIndex();
            listTest.testRemoviewWithArray();
        }
    }
    
    

    输出

    添加了课程:1 : 数据结构
    添加了课程:2 : C语言
    添加了课程:3 : 离散数学
    添加了课程:4 : 汇编语言
    添加了课程:5 : 高等数学
    添加了课程:6 : 大学英语
    有如下待选课程:
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:6 :大学英语
    课程:3 :离散数学
    课程:4 :汇编语言
    有如下待选课程(使用迭代器访问):
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:6 :大学英语
    课程:3 :离散数学
    课程:4 :汇编语言
    有如下待选课程(使用for-each方法访问):
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:6 :大学英语
    课程:3 :离散数学
    课程:4 :汇编语言
    ---------------- 修改集合中指定位置的元素
    有如下待选课程(使用for-each方法访问):
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:6 :大学英语
    课程:7 :毛概
    课程:4 :汇编语言
    我是课程:7 : 毛概,我即将被删除
    成功删除课程!
    有如下待选课程(使用迭代器访问):
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:6 :大学英语
    课程:4 :汇编语言
    我在List集合中的下标为3,我即将被删除!
    有如下待选课程(使用迭代器访问):
    课程:2 :C语言
    课程:1 :数据结构
    课程:5 :高等数学
    课程:4 :汇编语言
    通过传入指定集合中的元素的数组
    有如下待选课程(使用迭代器访问):
    课程:5 :高等数学
    课程:4 :汇编语言
    

    相关文章

      网友评论

          本文标题:Java中的集合框架

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