Java中的集合框架

2017-10-14  本文已影响7人  撸码小狂魔

学习了解

  1. 集合框架的概念与作用

概念与作用

集合概念:

集合的作用:

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

集合框架的体系结构

集合框架由两大家族组成,分别是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接口及其实现类——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 :汇编语言
上一篇下一篇

猜你喜欢

热点阅读