2019.07.13(day12)

java api

api:
    application interface:应用程序接口
    是java开发团队事先做好的类库
        (类库:就是一些java类的集合,一些功能的集合)
    狭义的理解就是java方法
        (调用api/调用api方法)

常用的api:
    -String 
        StringBuffer StringBuilder
    -封装类:
        Integer Float Double等八种
    -Calendar 日历类
    -Object类
    -Math类
        BigDecimal BigInteger
    -集合api:
        List集合 Set集合 Map集合
    -IO api:
        所有的输入输出流,文件操作
    线程api:
        Thread类和Runnable接口 线程池
    socket api:
        网络编程:tcp/ip编程
        Socket类
        ServerSocket

集合api:
    集合框架,把多个对象存储在一起,用集合的名称使用集合的api,来操作集合中的数据。
    有了集合可以让数据的存储变得很复杂
        (用对象存储不同类型的数据,然后把多个对象存储在集合中。)

集合框架的分类:
    List集合/数据结构:    
        线性,数据内容无序,但数据的位置是有序的,位置从零开始
        
        查找:有位置下标的数据查找快,没有位置下标的数据查找的速度不一定
        增加:增加到集合的尾部,速度快,增加到集合的某一个位置,速度慢
        删除:有位置下标,删除快,移动数据慢
            
    Set集合/数据结构:
        非线性,数据的内容无序,位置也无序,但是内容不能重复

        查找:查找速度慢
        增加:增加速度慢,要保证数据是没有重复的
        删除:先找后删,速度慢
        
    Map集合/数据结构:
        键值对,若干键值对组织在一起的数据

        查找:有key的数据查找快,没有key的数据查找的速度不一定
        增加:增加速度慢,因为要保证所有的key不能重复
        删除:又key的数据删除快,没有key的数据删除慢

以上三种集合:
    1.集合的初始都有一个固定的大小,随着往集合中添加数据,集合的空间不够,集合会自动扩容
    2.可以给集合存储若干不同类型的数据
    3.给集合存储完数据之后,就可以操作集合中的数据
    4.集合空
        集合对象为null,空
        集合对象不为null,但集合内容为空,size=0

集合的继承结构:
    collection接口:
        List接口:
            ArrayList类     ArrayList implements List
                (有具体的下标,通过下标查询速度快,不适合做增和删)
            LinkedList类     LinkedList implements List
                (不适合做查询,更适合做增和删)
        Set接口:
            HashSet类        HashSet implements Set
            TreeSet类        TestSet implements Set
    Map接口:
        HashMap类        HashMap implements Map
        Hashtable类        Hashtable implements Map

List集合常用的api:    
    boolean add(Object) 给集合添加元素
    int size() 获取集合中的元素的个数
    Object get(int) 从集合中获取指定下标位置的元素
    void clear() 清除集合中的所有元素
    boolean isEmpty() 判断集合是否为空
    List subList(int,int) 从起始索引到终止索引,包括头,不包含尾
    void remove(int) 删除指定索引位置的对象
    void remove(Object) 删除指定的对象
    void remove(Collection) 删除集合中的一个子集
    ...等

ArrayList特点:
    -理解为可变数组
    -可以存储数据
    -下标位置有序,内容无序
    -线程异步,速度快,不安全
    -实现自List接口

ArrayList可变数组是如何实现动态扩容的?扩容的原则是什么?
    申请一个更大的空间
    新数组=Array.copyOf(原数组,新数组的长度)
    ArrayList集合不适合存储量的数据
    空间增长规律:
        jre1.6及以下  old*3/2+1
        jre1.7及以上  old+old>>1(右移一位)

Vector特点:
    -用法和ArrayList一样
    -实现自List接口
    -可以存储null
    -下标有序,内容无序
    -线程同步,速度慢,安全