继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

小白日记之ArrayList和LinkedList区别及部分代码的实现

慕神guang
关注TA
已关注
手记 4
粉丝 9
获赞 14
                                            ArrayList
  • ArrayList是List线性表的顺序实现
  • 如名字般,底层采用数组(Array)来保存每个集合元素
  • 所以当使用get(int index)检索元素时效率最高
  • 当加入元素时要注意的点:
  • 1.保证ArrayList底层封装数组长度大于集合元素的个数
  • (否则ArrayList将创建一个为原来1.5倍的新数组,并且将原来数组元素“集体搬家”到新数组,
  • 再由垃圾回收机制回收原有数组,系统开销大)
  • 2.插入位置之后所有元素集体向后移动一格;(数组大小固定的原因)
  • 删除元素:
  • 也是全部都要移动,但和加入不同的一点在于,
  • 不用考虑改变底层数组的长度
  • 使用迭代器(Iterator)需要注意:
  • 当检索到倒数第二个元素时才能使用remove()删除元素
  • 三个构造方法:
  • ArrayList() 初始容量为10的空列表
  • ArrayList(Collection e) 含有指定元素的列表
  • Arraylist(int n) 指定大小的空列表
  • 常用方法:
  • 自己写一点增删改查
  • 具体看API

                                    LinkedList和ArrayList的区别
  • LinkedList是List和Deque接口的实现,采用链式存储的线性表
  • 所以可以将LinkedList当成栈,队列,双向链表使用(Deque带表双端队列,
  • 既具有队列特征,也具有栈的特征)
  • 这里主要讲讲LinkedList和ArrayList区别和对应的应用场景
  • 它增加元素add(int index ,E element)是由:
  • entry(int index):搜索制定索引处的元素
  • addBefore(E element,Entry ref):在ref节点之前插入element的新节点
  • 这就表明在增添元素时总需要检索对应元素的位置,增加了系统开销
  • 检索get(),romove(int index)同理需要检索
  • 但如果使用addFirst(E element),addLast(E e),getFirst(),getLast()
  • offer(E e),offerFirst(),offerLast();这些方法效率非常高
  • 迭代器删除时:当检索到最后一个元素时才可以使用remove()等方法删除;
  • ArrayList和LinkedList使用场景
  • 大部分情况,ArrayList性能优于LinkedList
  • 但如果程序中经常要使用add()方法向集合加入元素时,则应该考虑LinkedList()
    部分代码实现
public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList al1 = new ArrayList();
        ArrayList al2 = new ArrayList();
        //add(e)添加元素
        al1.add("兰博基尼 num-1");
        //add(int index,e)指定位置添加元素
        al1.add(1, "保时捷 num-2");
        for(int i=0;i<3;i++)
        {
            al2.add("al2的元素:"+(i+1));
        }
        al1.addAll(al2);
        System.out.println(al1);
        System.out.println("查找第二个元素!");
        //get();
        System.out.println(al1.get(1));
        System.out.println("删除al1的第四个元素和第五个元素");
        //remove(E e)和remove(int index)
        al1.remove("al2的元素:2");
        al1.remove(al1.size()-1);
        System.out.println("----------------------");
        System.out.println(al1);
        System.out.println("----------------------");
        System.out.println("使用迭代器输出和删除元素");

        Iterator<String> it = al1.iterator();
        for(;it.hasNext();)
        {
            String str = it.next();
            if("保时捷 num-2".equals(str))
            {
                al1.remove(0);
            }
            //此时会输出 java.util.ConcurrentModificationException的错误
//          if("兰博基尼 num-1".equals(str))
//          {
//              al1.remove(0);
//          }
        }
        System.out.println(al1);
    }

}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP