集合


1. 集合框架的概述

集合、数组都是对多个数据进行存储操作的结构,简称Java容器。

  1.1 Collection接口:单列集合,用来存储一个一个的对象。

    1.1.1 List接口:存储有序的、可重复的数据。(动态数组)

       (1) ArrayList:作为List接口的主要实现类;线程不安全,效率高。底层使用Object[ ]存储。

       (2) LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储。

       (3) Vector:作为List接口的古老实现类;线程安全,效率低。底层使用Object[ ]存储。

    1.1.2 Set接口:存储无序的、不可重复的数据。(数学中的集合)

       (1) HashSet:作为Set接口的主要实现类;线程不安全;可以存储null值。

       (2) LinkedHashSet:作为HashSet的子类,在添加数据的同时,每个元素还保存了前继(前一个元素)和后继(后一个元素)的引用;遍历内部数据时,可以按照添加的顺序遍历。对于频繁的遍历操作,LinkedHashSet效率高于HashSet。

       (3)   TreeSet:可以按照添加对象的指定属性,进行排序。

  1.2 Map接口:双列集合,用来存储一对(key,value)的数据。(数学中的函数:y=f(x) )

    (1)HashMap 

    (2)LinkedHashMap

    (3)TreeMap

    (4)Hashtable

    (5)Properties

 1.3 集合元素的遍历

  1.3.1 迭代器方式

        Collection list = new ArrayList<>();
        list.add("C");
        list.add("C++");
        list.add("Java");
        list.add("Python");
        list.add("JavaScript");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            //next():(1)指针下移。(2)将下移后所在位置的元素返回。
            System.out.println(iterator.next());
        }

   1.3.2 增强for循环

        Collection list = new ArrayList<>();
        list.add("C");
        list.add("C++");
        list.add("Java");
        list.add("Python");
        list.add("JavaScript");
        for (Object o : list) {
            System.out.println(o);
        }

   1.3.3 普通for循环

        ArrayList list = new ArrayList<>();
        list.add("C");
        list.add("C++");
        list.add("Java");
        list.add("Python");
        list.add("JavaScript");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }