自己在看《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--;
}
}
}