java-ArrayList和LinkedList

本文深入探讨了ArrayList与LinkedList这两种Java集合框架中常见的数据结构。详细分析了它们的底层实现方式及适用场景,并通过实例展示了如何利用LinkedList实现排序、栈和队列等功能。

自己在看《Thinking in Java》这本书时,看到了集合(Collection)讲到ArrayList和LinkedList,书上写的不是很详细,然后又去看了一些大牛的博客后,令我受益匪浅。

1.ArrayList是实现了基于动态数组的数据结构,LinkedList是实现了基于链表的数据结构。因此,ArrayList拥有数组的特性,而LinkedList拥有链表的特性。

2.ArrayList实现了随机访问的接口,LinkedList实现了Quene的接口。对于随机访问get和set,ArrayList优于LinkedList(需要移动指针),读取速度更快。对于新增(add)和删除(remove)操作(栈,队列操作),LinkedList更胜任,只需移动指针。而ArrayList添加的数据在中间时,需要将后面的数移动,而且如果长度大于容量,每添加一个数就要扩容。

Demo:
1.使用LinkedList实现对链表的排序

//LinkedList<Integer>实现链表的排序,使用插入排序
public LinkedList<Integer> InsertSortForLinkedList(LinkedList<Integer> list)
{
    int len=list.size();
    for(int i=1;i<len;i++)
    {
        int j=i-1;
        int temp=list.get(i);
        list.remove(i); //注意这里需要删除元素
        while(j>=0&&temp<list.get(j))
        {
           j--;
        }
        list.add(j+1,temp);
    }
    return list;
}

2.使用Linkedlist实现栈和队列

import java.util.*;
class stack{
   private Linkedlist list;
   public stack(){
       list=new Linkedlist();
   }
   //输出最上方元素
   public Object top()
   {
       if(list.size()!=0)
       {
           return list.getfirst();
       }
       return -1;
   }
   //出栈
   public void popo()
   {
       if(list.size()!=0)
       {
           list.removeFirst();
       }
   }
   //入栈
   public void push(Object v)
   {
       list.addFirst(v);
   }

   public int getlen()
   {
      return list.size();
   }

}

3.Test类

import java.util.*;

class Test()
{
   public static void main(String[] args)
   {
        stack st=new stack();
        st.push("张三");
        st.push(3);
        st.push("李四");
        st.push(5);
        System.out.println("stack长度为:"+st.getlen());
        /*
        *注意不能这么写,因为在出栈过程中stack的长度在发生变化
        for(int i=0;i<st.getlen;i++)
        {
            System.out.println(st.top());
            st.popo();
        }
        */

        int i=st.getlen()-1;
        while(i>=0)
        {
             System.out.println(st.top);
             st.pop();
             i--;
        }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值