Java--List

List

List:存储有序的,可重复的数据 --》”动态“数组

  • ArrayList:作为List接口的主要实现类;线程不安全,效率高;底层使用Object[] 存储
    
  • LinkerList:对于频繁的插入,删除操作,使用此类的效率比ArrayList高;底层使用双向链表存储
    
  • Vector:作为List接口的古老实现类,线程安全,效率低;底层使用Object[]存储
    

ArrayList的源码分析:

jdk7情况下:
ArrayList list=new ArrayList();//底层创建了长度是10的Object[]数组elementData
当此次添加的导致底层elementData数组容量不够,则扩容。

默认情况下,扩容到原来容量的1.5倍,同时需要将原来的数组复制到新的数组中


jdk8中ArrayList的变化:
底层的Object[] elementData初始化为{},并没有创建长为10的数组
第一次调用add()时;底层才创建长度为10的数据,并将数据添加到elementData,后续操作与jdk7无异


小结:jdk7中的ArrayList的对象的创建类似于单例的饿汉式,二jdk8的ArrayList的对象的创建类似于单例中的懒汉式,延迟了数组的创建,节省内存


LinkerList的源码分析:
LinkerList list=new LinkerList();内部声明了Node类型的first和last属性,默认为null(就类似于c里面的双向链表的指针)

常用方法:

因为是Collection的子类,所以Collection的方法都可以使用;之后新增了一些有关索引的方法:

        void add(int index,Object obj):在index位置插入obj元素
        boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来
        Object get(int index):获取指定index位置的元素
        int indexOf(Object obj):返回obj在集合中首次次出现的位置,如果不存在返回-1
        int LastIndexOf(Object obj):返回obj在集合中末次出现的位置,如果不存在返回-1
        Object remove(int index):移除指定index位置的元素,并返回此元素
        Object set(int index,Object obj):设置指定index位置的元素为obj
        List subList(int fromIndex,int toIndex):返回从fromIndex到Index位置的子集合

总结:常用方法

  • 增:add(int index,Object obj)
  • 删:remove(int index)
  • 改:set(int index,Object obj)
  • 查:get(int index)
  • 长度:size()
  • 遍历:
    1,Iterator迭代器方式
    2,增强for循环
    3,普通的循环
发布了49 篇原创文章 · 获赞 0 · 访问量 1395

猜你喜欢

转载自blog.csdn.net/qq_43616001/article/details/104069817