06.集合框架

集合框架是为表示和操作集合而规定的一种统一的标准体系结构,集合框架都包含三大块内容:对外的接口、接口的实现类和对集合运算的算法

接口:表示集合的抽象数据类型,如Collection、List、Set、Map、Iterator

实现:集合框架中接口的具体实现,如ArrayList、LinkedList、HashMap、HashSet

算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算方法,如查找,排序等,java提供了进行集合操作的工具类Collections(注意不是Collection,类似于Arrays类),它提供了对集合进行排序等多种算法。


Java集合框架中的两大类:Collection和Map,其中,collection又有两个子接口:list和set,所以通常说java集合框架有三大类接口:List、Set和Map,他们的共同点:都是集合接口,都可以用来存储很多对象

他们的区别如下:
  1. Collection 接口存储一组不唯一(允许重复)、无序的对象
  2. Set 接口继承自Collection接口,存储一组唯一(不允许重复)、无序的对象
  3. List接口继承自Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来排序,不会重新排列)的对象
  4. Map接口存储一组成对的键值,提供key键到value值的映射,map中key不要求有序,不允许重复,value同样不要求有序,但可以重复
  5. Iterator接口是负责定义访问和遍历元素的接口(迭代器)

集合框架结构:

  1. Collection——接口
    1. List——子接口
      1. ArrayList——实现类
      2. LinkedList——实现类
    2. Set——子接口
      1. HashSet——实现类
      2. TreeSet——实现类
  2. Map——接口
    1. HashMap——实现类
    2. TreeMap——实现类

1.List 接口

  1. 集合的方法

    方法名 说明
    add(对象) 添加
    size() 集合长度(大小)
    contains() 是否包含(返回boolean类型)
    get(index) 从集合里获取某个对象
    clear() 清空集合
    isEmpty() 集合是否为空(返回boolean类型)
    indexOf() 判断对象的索引位置
    remove(obje or index) 移除某个对象
  2. ArrayList

    ArrayList 对数组进行了封装,实现了长度可变的数组,ArrayList 存储数组的方式和数组相同,都是在内存中分配连续的空间

    优点:遍历效率高和随机访问效率高

  3. LinkedList

    LinkedList 采用链表存储方式,它还提供了额外的头部尾部的方法,可以对头部或者尾部的数据行进操作

    这些方法使得LinkedList 可被用作堆栈(Stack)或者队列(Queue)

    优点:插入和删除的效率高


2.Map 接口

Java集合框架中提供了Map接口,专门用来处理 键-值 映射数据的存储,Map中可以存储多个元素,每个元素都由两个对象组成,即一个键对象和一个值对象,可以根据键实现对值的映射

Map接口存储一组键值对,提供key到value的映射,map中的key不要求有序,但不允许重复,value同样不要求有序,但是可以重复,最常用的map实现是HashMap,它的存储方式是哈希表,哈希表也称为数列表,是根据关键码值(key value)而直接进行访问的数据结构,也就是说,它通过把关键码映射到表中一个位置来访问标记,以加快查找速度,存放记录的数组称为散列表,使用这种方式才存储的优点是查询指定元素效率高

HashMap中的常用方法:

方法名称 说明
Object put(Object key, Object value) 以键值对的方法进行存储
Object get(Object key) 根据键返回相关联的值,若没有,则返回null
Object remove(Object key) 删除指定的键 映射的 键值对
size() 返回元素个数
Set keySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key) 若存在指定的键值对则返回true
boolean isEmpty() 若不存在键值对关系,返回true
clear() 从此映射中删除所有映射关系

迭代器——Iterator

所有集合接口和类都没有提供相应的遍历方法,而是把遍历交给迭代器Iterator完成

Iterator 为集合而生,专门实现集合的遍历,它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一的编程接口

  1. 可以通过list集合对象调用iterator迭代器对象

    1
    2
    Iterator its = list.iterator();
    //语法:Iterator 变量名 = 集合名称.Iterator();
  2. 一般通过while循环读取出来(hasnext)判断里面是否有对象,有就迭代)

    1
    2
    3
    while(hasNext()){
    Object next = its.next();//next是真正往下迭代,进入下一个
    }
  3. 迭代器只能迭代一次,前面迭代过了,后面再调用就不管用了