【Java高级】2.集合类

集合:Java中集合类是用来存放对象的,Java API提供的集合类位于util包内

   集合相当于一个容器,里面包含一组对象-容器类,每个对象作为集合的一个元素出现

  与数组比较:数组也是容器,他是定长的,访问较快,但数组不会自动扩充

        数组可以包含基本数据类型或引用类型对象,集合中只能包含引用类型的对象

Java集合框架层次

Collection接口:一组称为元素的对象,一个Collection中可以放不同类型的数据

        是Set(无序集合,不允许重复)接口和List(有序集合,允许重复)接口的父类

        是否有特定顺序以及允许重复,取决于它的实现

      常用方法:add(Object)集合添加元素   addAll(Collection)集合中加入另一个集合对象

            size()集合中容纳元素数量    isEmpty()集合是否为空

               contains(Object)集合内是否含有参数对象

             iterator()产生一个迭代器  toArray()返回一个包含所有元素的对象数组

             toArray(Object[])把所有元素放入对象数组中

             remove(Object)集合中删除对象  removeAll(Collection)清空指定集合

             containsALL(Collection)判断集合内是否包含子集

             retainALL(Collection)删除自集合中不包含的元素

             clear()清空数组

Set接口:Collection的子接口,用来包含一组无序无重复的对象

     无序:元素存入顺序和集合中存储的顺序不同

     无重复:两个对象用equals()方法返回false,则两个对象不重复

Set接口的实现类:HashSet:特性为内部对象的散列存取,即哈希技术

         TreeSet:存入的顺序与存储的顺序不同,存储是按照排序存储的

List接口:Collection的子接口,用来包含一组有序有重复的对象

      List中的元素都对应一个整数型的序号,记载在容器中的位置,可以根据序号存取容器中的元素

List接口的实现类:ArrayList:线性存储,是一种线性表,特性与数组接近,数组大小不变,ArrayList大小可以动态改变

          LinkedList:数据结构中链表的java实现,相对于List,它可以通过方法在头部和尾部添加删除取得元素

               它可以非常方便的实现数据结构中的Stack(栈)和queue(队列)

 Iterator接口:Iterator对象被称为迭代器,可以方便的对容器元素遍历

        所有实现了Collection接口的集合类都有一个iterator()方法,返回一个实现了Iterator接口的对象

        实现了一个统一的用来遍历Collection中对象的方法,功能上比较简单,只能单向移动

           为遍历而设计,能够从集合中取出元素和删除元素,不能添加元素

Collection类:对Collection接口下的集合进行一些常见的、通用的操作

Map接口:存储的是键/值对这样成对的对象组,通过键对象来查询值对象,是不同于Collection的另一种集合接口

     key值是唯一不能重复的,key对象与value对象关联在一起,当put相同key,后来的会替换先前的

Map实现类:HashMap:基于哈希表实现,键值对按照Hash算法储存,每个key对象对应唯一的Hash值

            可以通过调优初始容量和负载因子,优化空间使用

       TreeMap:基于树实现,键值对按照key值排序储存

            没有调优选项,因为树总是处于平衡状态

      HashMap性能优于TreeMap

HashMap与Hashtable比较:Hashtable基于陈旧的Dictionary类,HashMap是Java1.2引进的Map接口的一个实现

              Hashtable是线程安全的、同步的,HashMap是线程不安全的、不同步的

              HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

集合类的选择:Set存放元素不允许重复,List存放的元素有一定顺序

        Map的应用主要利用键值对来快速查询

        ArrayList和LinkedList的区别在于随机查询ArrayList好,插入删除LinkedList好

        HashSet与TreeSet区别在于集合内元素是否排序

使用集合类时常见异常:ClassCastException从集合中取出元素对象进行类型转换时类型不匹配

            UnsupportedOperationException底层没有实现上层相应方法,Collection抛出该异常

            ConcurrentModificationException当采用Iterator遍历时,集合中的元素被改变,Iterator抛出异常

            IndexOutOfBoundsException集合元素引用索引超出界限

            NoSuchElementException  LinkedList中getLast、getFrist等方法取元素时List为空

集合使用上的问题:集合add()方法接受的是一个Object对象的参数,获取集合中的对象时,必须进行造型(强制类型转换)操作

          造型操作可能出现问题,一般在程序运行时发生,发现问题比较困难

 

泛型出现:对象放入集合前,为其做限制,获取集合对象时,不用进行造型的操作

      不同类型的对象添加到集合中的时候,编译时就会报错

泛型:参数化类型,它能向方法一样接受不同类型的参数,如ArrayList<E> 变量名  (E是变量类型)

posted @ 2017-10-19 17:35  chain155  阅读(226)  评论(0)    收藏  举报