对于List的一些整理(一)

                                **对于List的一些整理(一)**

前言:一直想写一写自己对于Java的一些知识点的理解,所以整理一些知识点,有自己 实验的,也有借鉴别人的,全当自己的只是整理好了。
说起list就不得不提一句它的根接口Collection了,Collection常用的集合类的子接口包括list和set(map不是Collection的子接口,map是集合类的一个根接口),话不多说直接上图看看他们之间的关系(图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口,这张图是许多大神用的直接拿来了)
在这里插入图片描述
list的一些特性:
list是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
它有一系列的和索引相关的方法,list不可以存储基本数据类型,必须要包装,不过jdk会自动帮我们完成装箱拆箱操作。

一 基础篇
此篇为list的一些基本用法,list集合
1.ArrayList
ArrayList的底层数据结构是数组,ArrayList是不同步的是非线程安全的,因为数组的扩容是当前长度的50%的扩容,所以ArrayList也是50%的扩容,ArrayList查询快,根据索引直接定位到元素,但是增加和删除慢,ArrayList增加和删除的时候要移动数据所以要慢一些,LinkList则与ArrayList相反,linkList查询慢,增加和删除快,linkList是链表结构是由相互指针指向的增加和删除的时候只要移动指针的指向就可以所以要比ArrayList增加和删除的时候快,由于LinkList是有指针相连的所以查询的时候会比ArrayList慢。
2.ArrayList的用法
add()直接在末尾添加元素
add(index , object)在指定的索引位置添加元素,该索引位置的元素和后面的 元素集体后移一位
remove(int index)删除指定索引的元素
clear()清空该List集合
get(int index)获取指定索引的元素
set(int index,obj)修改该索引位置的元素
indexOf(object)获取该元素在集合中的索引,如果存在则返回索引,不存在返回-1
subList(Int fromIndex , Int EndIndex)截取从from到end的元素形成一个新的集合(包头不包尾),但是该方法返回的不是一个新的对象只是一个引用,对subList的操作也会影响到原list,比如subList clear以后原list集合的相关元素也会clear
isEmpty()判断是否为空空为true非空为false
contains()是否包含摸个元素是true否false
toArray()转为数组(将list转化为你所需要类型的数组,比如String[] str = (String[])result.toArray(new String[result.size()]))
下边介绍list的三种遍历:
 for (int i = 0; i < list.size(); i++) {}
  for (News s : list) {}
 
  Iterator iter = list.iterator();
while (iter.hasNext()) {
News s = (News) iter.next();
}
上边两种都是常用的遍历方式,第三种是用Iterator迭代器遍历
3.LinkList
LinkList跟ArrayList有一些不同,有一些特有的api
addfirst()
addlast()
getfirst()
getLast()
也可以直接add和get指定的索引位置
4.Array和List的区别
List 在很多方面跟 Array 数组感觉很相似,尤其是 ArrayList,那 List 和数组究竟哪个更好呢?
相似之处:
都可以表示一组同类型的对象
都使用下标进行索引
不同之处:
数组可以存任何类型元素
List 不可以存基本数据类型,必须要包装
数组容量固定不可改变;List 容量可动态增长
数组效率高; List 由于要维护额外内容,效率相对低一些
容量固定时优先使用数组,容纳类型更多,更高效。
在容量不确定的情景下, List 更有优势,看下 ArrayList 和 LinkedList 如何实现容量动态增长
当 ArrayList 的元素个数小于 6 时,容量达到最大时,元素容量会扩增 12;
反之,增加 当前元素个数的一半。
.LinkedList 的扩容机制:
可以看到,没!有!扩容机制!
这是由于 LinedList 实际上是一个双向链表,不存在元素个数限制,使劲加就行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值