JAVA学习DAY-12

目录

集合容器

数组(Array)有什么缺点

1.数组的封装类--列表(ArrayList)

ArrayList类中的 E 是什么?

2.双向链表封装类--LinkedList

3.遍历ArrayList和LinkedList的几种方式

归纳

Array和ArrayList的区别是什么?

ArrayList和LinkedList的区别是什么?

ArrayList和LinkedList的常用方法


集合容器

数组(Array)有什么缺点

1.在创建数组的时候就需要定死长度,在运行过程中需要判断剩余长度,并动态扩容

2.在中间插入的时候,需要将后面的元素进行后移

3.在中间删除的时候,需要将后面的元素进行前移

1.数组的封装类--列表(ArrayList)

数组特点:有序的、不唯一的

-构造方法        先研究如何构造对象

ArrayList()

ArrayList(int)

-成员变量        研究构造出来对象中有什么

elementData        --Object 类型数组

size                      --int 类型

-成员方法        研究如何操作对象中的成员

add(int)                --在数组尾部的第一个不为空的位置添加

add(int,E)             --在数组中的指定位置插入

set(int,E)              --修改数组指定位置

remove(int)          --根据索引号移除

remove(Object)   --根据指针移除,如果存在多个,只会移除第一个

get(int)                --根据指定的索引号找到某个元素并返回

 

无参构造方法:

初始化的时候指向空数组,在扩容的时候指向新数组

 

 

带参构造方法:

 

add方法:

 

 remove方法:

 

 

set方法:

 

ArrayList类中的 E 是什么?

泛型

用泛型来实现类中用到的数据类型的未知

        --作者在编写的时候用 E 来表达数据类型的位置

        --调用者在使用的时候,可以给出 E 的具体的类型,也可以不给出

          如果给出E的类型,是在声明指针的时候给出

                例如:E=String  E=Car  E=Dog

                          不给的话  E=Object

              给出E的具体数据类型的语法:

                        ArrayList<String>a1 = new ArrayList();

                        ArrayList<Car>a2 = new ArrayList();

(可以是参数类型,可以是返回值类型,可以是任意变量的类型,可以是向下转型的类型)

用泛型的好处是

被调用方可以帮调用方写向下转型的代码

 

 

 

 

2.双向链表封装类--LinkedList

底层:Node对象

LinkedList内部类    --Node类(用于创建双向链表中的节点对象)

 

 

--构造方法

 

--成员变量

--成员方法

        增:1.addFirst(E)        在头部添加

               2.addLast(E)        在尾部添加

               3.add(E)                在尾部追加

               4.add(int,E)          在指定位置插入

链表在中间插入的速度要优于数组,只需要找到插入位置的节点,创建新节点,然后修改指针即可

数组在尾部插入很快,但是在首部或者中间插入比较慢,因为需要后移

        删:1.removeFirst                        删除头部

               2.removeLast                        删除尾部

               3.remove(int index)         根据指定位置删除

               4.remove(Object  o)             根据指定元素删除

        改:set(int  index,E  element)

               

         

        查:get(int  index)

        链表并没有索引的机制,底层通过遍历链表然后找到指定位置的节点,然后通过二分查找法找到指定位置的节点,并返回节点中的item。

        从查询角度来看,数组的性能远远优于链表。

中间插入和删除,链表优于数组,不需要大量后移

查询和修改,数组优于链表,因为数组有索引

链表不存在扩容和转移,数组需要

3.遍历ArrayList和LinkedList的几种方式

1)普通for循环

2)增强型for循环

 

3)forEach循环

 

4)迭代器

 

归纳

Array和ArrayList的区别是什么?

Array是数组,ArrayList是类
Array是定长的(需要手动扩容),ArrayList长度可变(使用过程中自动扩容)
ArrayList的底层是Array


ArrayList和LinkedList的区别是什么?

1.底层数据结构实现:ArrayList底层数据结构是动态数组,而 Linkedlist的底层数据结构是双向链表
2.随机访问(即读)效率:ArrayList比LinkedList在随机访问的时候效率要高,因为ArrayList底层是数组,可以通过索引号快速访问,LinkedList是通过二分查找法遍历链表节点进行查找的
3.增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList增删操作需要大量的前移或后移,这个过程中涉及到大量的赋值操作比较耗时间, LinkedList只需要修改节点对象的左右指针即可。
4. 内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList
的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素
5.综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList

ArrayList和LinkedList的常用方法

 ArrayList的常用方法:

LinkedList的常用方法:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值