arrayList
优点
1。支持自动改变大小的功能
2。可以灵活的插入元素
3 可以灵活的删除元素
集合中存放的依然是对象的引用而不是对象本身。
在Java中实例化数组
** 声明Java数组变量时,只声明数组本身的变量(引用
声明实际上并不创建数组。**
int [] array;
array = new int [10];
这样为创建一个类型数组, int其中包含10个 int变量的空间。
之前的Java数组示例创建了 int一个原始数据类型的数组。
创建一个对象引用数组。例如:
'String [] stringArray = new String [10];'
Java允许创建对任何类型对象(对任何类的实例)的引用数组。
ArrayList 底层采用数组实现,当使用不带参数的构造方法生成 ArrayList 对象 时,实际上会在底层生成一个长度为 10 的 Object 类型数组
如果增加的元素个数超过了 10 个,那么 ArrayList 底层会新生成一个数组,长 度为原数组的 1.5 倍+1,然后将原数组的内容复制到新数组当中,并且后续 增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该 过程。
**
常见的方法
**
JAVA.util.ArrayList
E表示泛型 ArrayList是一个泛型类、
JAVA.util.ArrayList的一些方法:
+rrayList() 构造函数 创建一个空的列表 size为0
+add(o:E):void 在list的末尾加上一个元素o
== +add(index:int,o:E):void== 在指定的地方插入一个元素
+clear():void 从list删除所有 的元素
==+remove(index;int ):boolean == 去除指定的index的元素 返回true
+remove(o:object):boolean 删除list第一次元素o 返回true
+size():int 返回list中的元素个数
==+get(index :int ):E == 返回指定index 的元素、
== +contains(o: Object): boolean == 如果 list 含有元素o 返回 true
**创建 ArrayList list = new ArrayList<>()
访问`list.get(index)
更新
list.set(index,"HuLi")
返回大小list.size()
排序java.util.Collections.sort(arrsylist)
添加元素list.add("HULI")
插入一个元素list.add(index,"HULI")
删除一个元素list.remove(index)**
linkedList
1)
LinkedList 底层采用双向链表实现
它包含一个非常重要的内部类:Entry。Entry是双向链表节点所对应的数据结构,包括的属性有:
当前节点所包含的值,上一个节点,下一个节点。
(02)
从LinkedList的实现方式中可以发现,它不存在LinkedList容量不足的问题。
(03) LinkedList的克隆函数,即是将全部元素克隆到一个新的LinkedList对象中。
(04) LinkedList实现java.io.Serializable。当写入到输出流时,先写入“容量”,再依次写入“每一个节点保护的值”;当读出输入流时,先读取“容量”,再依次读取“每一个元素”。
方法
**
add(E e):在链表后添加一个元素;
addFirst(E e):在链表头部插入一个元素;
addLast(E e):在链表尾部添加一个元素;
push(E e):与addFirst方法一致*
remove() :移除链表中第一个元素;
remove(E e):移除指定元素;
removeFirst(E e):删除头,获取元素并删除;
removeLast(E e):删除尾;
pollFirst():删除头;
pollLast():删除尾;
pop():和removeFirst方法一致
get(int index):按照下标获取元素;
getFirst():获取第一个元素;
getLast():获取最后一个元素;
peek():获取第一个元素,但是不移除;
peekFirst():获取第一个元素,但是不移除;
peekLast():获取最后一个元素;
pollFirst():查询并删除头;
pollLast():删除尾;
arrayList 与linkedList 的一些区别
== 一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个都是对List接口的实现。 ==
前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列
**a) ArrayList 底层采用数组实现,LinkedList 底层采用双向链表实现。
b) 当执行插入或者删除操作时,采用 LinkedList 比较好。
,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
c) 当执行搜索操作时,采用 ArrayList 比较好 **
(因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。)
d)从效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。