Java高级应用编程——集合

一、Java中的集合类

集合概述
    Java中集合类是用来存放对象的
    集合相当于一个容器,里面包容着一组对象 ————容器类
    其中的每个对象作为集合的一个元素出现
    Java API提供的集合位于java.util包内
java中数组与集合的比较
    数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
    数组可以包含基本数据类型或者引用类型的对象,而集合中只能包含引用类型的对象

Java中集合框架层次结构
Java高级应用编程——集合_第1张图片

二、Collection接口

Collection接口
    一组称为元素的对象
    一个Collection中可以放不同类型的数据
    是Set接口和List的父类
    是否有特定的顺序以及是否允许重复,取决于它的实现
        Set——无序的集合;不允许重复
        List——有序的集合,允许重复
Set接口
    Collection 的子接口
        用来包含一组无序无重复的对象
            无序——是指元素存入顺序和集合内存储的顺序不同
            无重复——两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1,e2重复
    Set接口实现类
        HashSet——HashSet的特性在于其内部对象的散列存取,即采用哈希技术
        TreeSet——TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的
List接口
    Collection的子接口
    用来包含一组有序有重复的对象
    List中的元素都对应一个整型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素
    List有两种集合实现类
        ArraryList
        LinkedList

List接口常用方法

//List构造方法
    List list = new ArrayList();
//在列表中的index位置,添加element元素
        `void add(int index,Object element) `
//例如:在下标为0的地方添加一个对象Object
        `list.add(1,"Object");`
//返回列表中指定位置的元素
    `Object get(int index)  `
//例如:返回列表list的第一个元素
    `System.out.println(list.get(1))`
//      返回某个对象在集合中第一次出现的所引值,不存在返回-1
        System.out.println(list.indexOf("我是一个对象"));
        System.out.println(list.indexOf(new Date()));
//      返回某个对象在集合中最后一次出现的所引值,不存在返回-1
        System.out.println(list.lastIndexOf("我是一个对象"));
        System.out.println(list.lastIndexOf(new Date()));
//      移除列表中指定位置的元素
        list.remove(1);
        System.out.println(list);
//      用指定元素替换集合中的指定位置的元素
        list.set(2, "我是新的一个对象");
        System.out.println(list);
ArraryList与LinkedList的比较
    存储结构:
        ArrayList是线性顺序存储
        LinkedList对象彼此间串连起来的一个链表
    操作性能
        ArrayList适合随机查询的场合
        LinkedList元素的插入和删除操作性高
    从功能上看,LinkedList要多一些
    Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
    所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象
    Iterator对象实现了统一的一个用来遍历Collection中对象的方法
    Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能
    Iterator的功能上比较简单,使用中,只能单向移动
 Collections类是类似于Arrays类的公用工具类 ,它提供了一些static方法供集合类使用或操作集合类 

三、Map接口

    Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
    Map是不同于Collection的另外一种集合接口
    Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
    Map接口有两个实现:
        HashMap — key/value对是按照Hash算法存储的
        TreeMap — key/value对是排序(按key排序)存储的

Java高级应用编程——集合_第2张图片
Java高级应用编程——集合_第3张图片

HashMap 与 TreeMap 的比较
    HashMap基于哈希表实现。
    TreeMap基于树实现。
    HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。
    TreeMap没有调优选项,因为该树总处于平衡状态
    HashMap性能优于TreeMap
HashMap 与 Hashtable 的比较
    Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
    Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
如何选择集合类
    Set内存放的元素不允许重复,List存放的元素有一定的顺序。
    Map的应用主要在利用键/值对进行快速查询。
    ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好 。
    HashSet和TreeSet的区别在于集合内元素是否排序 。
集合在使用上的问题 示例 CollectionException.java
    集合中的add( )方法接受的是一个Object对象的参数 ,在获取集合中的对象时,必须进行造型(强制类型转换)操作。
    造型操作可能出现问题,一般在程序运行时才能发生,发现问题比较困难。
集合中泛型的使用
    在对象放入集合前,为其作个限制
    在获取集合中的对象时,不用进行造型的操作
    当有不同类型的对象添加到集合中的时候,编译时就能检查出错误

你可能感兴趣的:(Java)