Java 高级 之 List

Java 集合 Collection
使用Java 集合框架的情况:并不知道程序运行时需要多少对象 需要更复杂方式存储对象
Iterator 迭代器

Collection 是 List 和 Set的父接口
Collection接口:
存储一组不唯一,无序的对象。
常用方法:
add(),int size(),contains(), remove(), clear(), isEmpty(), iterator()(迭代器方法)
toArray()

List接口:
储存一组不唯一,有序(插入顺序)的对象

ArrayList 实现类
数组作为底层存储方式。
常用方法:
除继承父类接口的一些方法外
add(int,Obj), addAll(), removeAll(),
set(), get() , …

实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
(没用泛型的时候list.add§;p是Object类型)

add的逻辑:
1.插入前先判断容量是否越界,是则扩容。
1)扩容后比数组最大长度大,则是int的最大值最为数组长度,还没达到数组最大长度,则是数组最大长度
2)正常来说扩容1.5倍 ,如果扩容1.5倍以后还不够,则直接把当前长度赋值给数组新长度
3)如果是新数组 把长度与10比较 大的赋值给新数组长度
2.不需要扩容则直接插入
由于底层是数组,遍历方便,随机访问方便、改动对应方便

LinkedList 实现类
链表作为底层存储方式
常用方法:
除继承父类接口的一些方法外:
addFirst(), addLast(), removeFirst(),removeLast()
getFirst(),getLast()
链表:多个Node节点互相存储地址,以下一个Node的地址存储
遍历不方便,插入和删除元素时效率比较高

LinkedList 和 ArrayList 异同点:
相同点:
同为List实现类,元素有序,不唯一 ,长度可变
共有Collection及List 的通用方法
不同点:
ArrayList:数组作为底层储存方式,可随元素个数分配不同大小的数组,遍历元素访问元素效率高,插入和删除元素比较差。
LinkedList:双向链表作为底层存储方式,根据Node对象中的Node属性next 和 prev 来确定顺序 遍历不方便 插入 删除元素效率高

ArrayList 和LinkedList 的遍历方法:
1.fori
2.增强for
List list=new ArrayList();
for(Object obj : list){
sout(obj);
}
3.迭代器
Iterator ite=list.iterator();
while(ite.hasNext){
sout(ite.next());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值