集合

来源:互联网 发布:苹果软件下载大全 编辑:程序博客网 时间:2024/05/22 00:53
7.1.1 集合
  数组:
    1)数组长度固定不变。(不能动态变化)
    2)可通过数组名.length获取数组的长度。(无法获取真实的个数)
    3)分配连续的空间。(效率低)
 集合:
  好处:灵活,实用,可提高效率,不同的集合可适用于不同的场合。
7.1.2Java集合框架包含的内容
    1)集合框架:表示和操作集合而定的一种统一的标准体系结构。
    2)三大块:对外的接口、接口的实现和对集合运算的算法。
    3)接口:表示集合的抽象数据类型。如:Collection、List、Map、Iterator。
    4)实现:集合框架中的具体实现。如:ArrayList,LinkedList、HashMap、HashSet。
    5)算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法。如查找、排序。
    三大类接口:(Collection)List、Set和Map
      1)共同点:都是集合接口。
      2)不同点:
        Collection:存储一组不唯一(允许重复)、无序的对象。
        Set:存储一组唯一(不允许重复)、无序的对象。
        List:存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。
        Map:存储一组成对的键—值对象,提供key(键)到value(值)的映射。 
             key:不要求有序,不允许重复。
             value:不要求有序,但允许重复。
        Iterator:负责定义访问和遍历元素的接口。
7.2 List接口
    ArrayList和LinkedList 
    相同点:都可以容纳所有类型的对象,包括null,允许重复,并且保证元素的存储顺序。
    不同点:
    ArrayList:对数组进行了封装,实现了长度可变的数组。存储数据的方式和数组相同,都是在内存中分配连续的
               空间。
         优点:在于遍历元素和随机访问元素的效率比较高。(查)
    LinkedList采用链表存储方式。
          优点:在于插入、删除元素时效率比较高。提供了额外的addFirst()、addLast()、removeFirst()和
                removeLast。可以在LinkedList的首部或尾部插入或删除操作。可使得LinkedList可被用作堆栈
                 (stack)或者队列(queue)。(增删改)
    常用方法:
    一、ArrayList
        List 对象名 = new ArrayList();
      boolean add(Object o):在列表末尾顺序添加元素,起始索引位置人0开始。
      void add(int index,Object o):在指定的索引位置添加元素,原索引位置及其后面的元素依次后移
                                    注意:新添加元素的索引位置必须介于0和列表中元素个数之间。
      int size() 返回列表中的元素个数。
      Object get(int index):返回指定索引位置处的元素。
                                    注意:取出的元素是Object类型,使用前需要进行强制类型转换。
     boolean contains(Object o):判断列表中是否存在指定元素。
     boolean remove(Object o):从列表中删除元素。
     Object remove(int index):从列表中删除指定位置元素,起始索引位置从0开始。
    Vecto和ArrayList的异同:
      相同点:分配连续存储空间,实现出长度可变的数组。实现原理相同,功能相同。
      不同点:Vector不线程安全的,ArrayList重速度,轻安全,是线程非安全。
              当长度需要增长时,Vector默认增长为原来的一倍,而ArrayList只增长50%,有利于节约内在空间。
    二、LinkedList
        LinkedList 对象名 = new LinkedList();
      特殊方法:
        void addFirst(Objecct o):在列表的首部添加元素。
        void addLast(Object o):在列表的尾部添加元素。
        Object getFirst():返回列表中第一个元素。
        Object getLast():返回列表中的最后一个元素。
        Object removeFirst():删除并返回列表中的第一个元素。
        Object removeLast():删除并返回列表中的最后一个元素。
7.3 Map
        Map 对象名 = new HashMap();
      1. 常用方法:
         Object put(Object key , Object value):以“键—值对”的方式进行存储。
                注意:键必须是唯一的,值可以重复,如果试图添加重复的键,那么最后加入的“键—值对”将替换掉原来的“键—值对”
         Object get(Object key):根据键返回相关联的值,若不存在指定的键,则返回null。
         Object remove(Object key):删除指定的键映射的“键—值对”。
         int size():返回元素个数。
         Set keySet():返回键的集合。
         Collection values():返回值的集合。
         boolean containsKey(Object key):若存在指定的键映射的“键—值对”,则返回true。
         boolean isEmpty():若不存在指定的键—值映射关系,则返回true。
         void clear():从此映射中移除所有映射关系。
      2.Hashtable和HashMap的异同:
         相同点:都采用哈希表存储方式。同样实现键值映射的集合类。实现原理相同。功能相同。
         不同点:a.Hashtable继承Dictionary类,而HashMap实现了Map接口。
                 b.Hashtable是线程安全,HashMap重速度、轻安全,是线程非安全。
                 c.Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和value都允许)。
7.4 迭代器Iterator
      a.为集合而生专门实现集合的遍历,隐藏了各种集合实现类的内部细节,提供了遍历集合的缟素编程接口.
      b.Collection接口的iterate()方法返回一个Iterator.
       方法: 
         boolean hasNext():判断是否存在另一个可访问的元素。
         Object next():返回要访问的下一个元素。


    1.遍历Map
      Map mm = new HashMap();
      .....
      Set keys = mm.keySet();
      Iterator it = keys.iterator();
      while(it.hashNext())
      {
         键的数据类型 key = (键的数据类型)it.next(); 
         类名 对象名 = (类名)mm.get(key);
      }
     或用foreach
      for(Object key : keys)
      {
         类名 对象名 = (类名)mm.get(key);
      }
    2.遍历List
      List list = new ArrayList();
      Iterator it = list.iterator();
      while(it.hashNext())
      {
         
         类名 对象名 = (类名)mm.get(key);
      }
     或用foreach
      for(Object key : keys)
      {
         类名 对象名 = (类名)mm.get(key);
      }
7.4.2 数组和集合的主要区别:
      1)、数组可以存储基本数据类型和对象,而集合中只能存储对象(可以包装类形式存储基本数据类型)。
      2)、数据长度固定,集合长度可以动态改变。
      3)、定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object。
      4)、无法直接获取数组实际存储的元素个数,length用来获取数组的长度,但可以通过size()直接获取集合
           实际存储的元素个数。
      5)、集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续空间方式。
      6)、集合以接口和类的形式存在,具有封装、继承和多态等类的特性,通过简单的方法和属性调用即可实现
           复杂操作,大大提高了软件的开发效率。
      7)、JDK中有一个Arrays类,专门用来操作数组,它提供一系列静态方法实现对数组搜索、排序、比较和填充等。
           JDK中有一个Collections类,专门用来操作集合,实验室提供一系列静态方法实现对各种集合的搜索、
           复制、排序和线程安全化等操作。
7.5 泛型集合
    1、在创建集合对象时指定集合中元素的类型,从集合中取出元素时无须进行类型强制转换,并且如果把非指定
       类型对象放入集合,会出现编译错误。
    2、创建:
       List<类型> 对象名 = new ArrayList<类型>();


       Map<键的数据类型,值的数据类型> 对象名 = new HashMap<键的数据类型,值的数据类型>();
       Set<键的数据类型> set对象名 = 对象名.ketSet();
       Iterator<键的数据类型> it = set对象名.iterator();
    3、包装类:
       是指将基本数据类型封装到一个类中,也就是将基本类型包装成一个类类型。
       8个包装类:Byte、Short、Integer、Long、Flaot、Double都是继承Number抽象类。
       1)、包装类常用的构造方法:
             public Type (type value)->Type表示包装类型,type代表基本类型。
             Integer intValue = new Integer(21);
       2)、常用的类型转换:
             public type typeValue()
             Integer integerId = new Integer(25);
       3)、字符串-->基本类型:
             public static type parseType(String type)
             int num = Integer.parseInt("23");
       注意:一旦创建了某个包装类对象,该对象所代表的值就不能改变了。