java学习 集合之arrayList

说明:

 1:ArrayList 其实就是可自动扩容的数组  

 2:ArrayList 每次扩容会预申请多一点空间(1.5倍+1)  最大容量是 Integer.MAX_VALUE - 8  

 3:ArrayList 实现了RandomAccess 提供了随机访问功能 

1:继承关系:

     


2:比较重要的类成员

     private static final int DEFAULT_CAPACITY = 10;   private static final 修饰的成员变量  该变量代表ArrayList 默认的初始大小是10

     private static final Object[] EMPTY_ELEMENTDATA = {};  代表arrayList  没有任何元素

     private transient Object[] elementData;     用于存储ArrayList 的元素  这里用上了transient 关键字  表明是常变的

     private int size; arrayList 长度


3:构造方法

      ArrayList 总共有3个构造方法 

      1: public ArrayList()   构造含有10个容量的空list 

      2: public ArrayList(int initialCapacity)  构造含有指定容量的空list  如果参数小于0 则会抛出异常   就是说这里是可以设置等于0 的。但貌似也没有任何意义。

      3: public ArrayList(Collection<? extends E> c)  构造包含指定集合长度的非空 list。 如果c  为null 会产生空指针异常   


4:深入了解的一些方法

     1: public void trimToSize()   修剪ArrayList 到当前元素大小的长度  如容量是150  实际元素是100 那么将去除掉50的容量   感觉平时很少用上

     2: public void ensureCapacity(int minCapacity)   保障容量  参数超过当前容量则会扩容 

     3: public boolean contains(Object o)  判断是否包含某元素 实际上内部调用的 indexOf() 方法

     4: 添加方法 有2种添加方式

          1: public boolean add(E e)  添加元素到数组末尾 会自动扩容 第一次添加元素的容量是10

              public void add(int index, E element) 添加元素到指定位置 同样会扩容 如果超过数组长度 则会抛出异常

              主要的实现是调用 System.arraycopy  该方法是System类中的一个JNI方式实现类.(JNI , Java Native Interface 故名思意,就是java 语言调其它语言的一个接口)

              详细介绍为: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
              src:源数组; srcPos:源数组要复制的起始位置;
              dest:目的数组; destPos:目的数组放置的起始位置; 
              length:复制的长度.

              

              举个列子: 假设现有数组 {1,2,3,4,5} 现在需要添加元素 {0}  到索引 2 中 .那么执行完arraycopy 方法后 结果应该是 {1,2,3,3,4,5}

           2: public boolean addAll(Collection<? extends E> c)  将指定集合的元素添加到列表最后 采用 addAll 的方式会比for 循环添加有效率

               public boolean addAll(int index, Collection<? extends E> c) 添加到指定位置 类似上述add 方法

     4: 删除方法 总共有2种(删除都不会减少容量大小)

            1:public E remove(int index)   删除指定位置元素 

            public boolean remove(Object o) 删除指定元素  效率比较慢 需要循环比较

           2: public boolean removeAll(Collection<?> c) 删除指定列表内的所有元素 


5:遍历访问

      1:有3种方式可以遍历访问
            1.1  Iterator迭代器遍历
            1.2  索引随即遍历
            1.3  for循环遍历
            通过测试证明是 索引访问最快。并且根据JDK 中所说  所有实现了RandomAccess 推荐使用随即遍历。
     而linkedList那些未实现该接口的类在使用Iterator进行迭代效率更高.
           

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值