集合之List

List常用的有ArrayList,LinkedList,Vector三兄弟,而且List只能存储引用类型,List里的元素都是有序可重复的,这里的有序指的是按添加元素的顺序存储,不是对集合的排序。

1.大哥ArraryList:首先它是有序,就是按顺序进行存储的,而且里面的元素可以重复存在

因为它存储是有序的所以查找的速度很快,get和set都要快于LinedList,因为LinkedList要移动指针。但是插入和删除的速度慢于LinkedList

测试ArrayList的文章:https://www.cnblogs.com/nnngu/p/8234568.html

二分查找:https://www.cnblogs.com/nnngu/p/8234568.html

ArrayList之所以速度快是因为基于数组实现的。

常用方法:add()用于向ArrayList中添加元素

remove()删除元素,set()更新元素,get()获得元素,size()获得集合的大小,isEmpty()判断元素是否为空

indexOf()获得元素第一次出现的下标,lastIndexOf()获取元素最后一次出现的下标,contains()判断是否包含某个元素,返回一个布尔值,

clear()清空当前集合,toArray()转换为数组,

可以使用迭代器Iterator来遍历数组:

2.二哥LinkedList是基于双向链表实现的,它增加和删除的速度要快与ArrayList,因为ArrayList要移动数据

3.三弟Vector,已经过时了。。。

Vector是线程安全的,因为它的基本方法如add(),remove(),set()都加了synchronized关键字。

但是目前都使用Collections.synchornizedList来替代

它可以使用Enumeration枚举来进行循环显示:

三弟的儿子Stack继承于Vector,也就是它的儿子

Stack就是栈,拥有先进先出的特性。
其中主要用到三个方法:push()入栈,pop()出栈,peek()查看栈顶的元素

 测试ArrayList和LinkedList的性能:

使用LinkedList从头部增加元素的时间为6ms

使用ArrayList从头部增加元素的时间为440ms,可见LinkedList添加元素的速度比ArrayList快了10倍左右。

小练习:移除ArrayList中所有能被3整除的元素.

常规实现方法,发现去除不完整,因为当你移除第一个9时list的索引也会跟着变动

所以我们应该从尾部开始循环,

第二种方法:直接删除元素的值,因为直接传入num,由于num是int类型list会认为num是下标而不是值,所以应该转换为包装类型Integer

原文地址:https://www.cnblogs.com/javazyh/p/10803998.html