JAVA基础MINA基础学习,第1张

JAVA基础MINA基础学习,第2张

大家一般都知道ArrayList和LinkedList的大致区别:
1。ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构。
2。ArrayList对于get和set的随机访问优于LinkedList,因为LinkedList要移动指针。
3。对于添加和删除操作,LinedList更占优势,因为ArrayList要移动数据。
因为sun的开源,我们可以从代码的角度来看两者的区别;
先说构造函数
ArrayList的默认构造函数
public ArrayList(){
this(10);
}
这10是什么意思?看带参数的构造函数,会看到
public ArrayList(int initial capacity){
super();
if(initial Capacity < 0)
抛出新的IllegalArgumentException("非法容量:"+
initial Capacity);
this . element data = new Object[initial capacity];
}
Examda提示:ArrayList已经为storage 空分配了10个对象数组。
我们来看看LinkedList
公共链表的构造函数(){
header . next = header . previous = header;
}
将LinkedList的所有指针归零。从上面的代码中,我们可以看出链表是一个双向链表。
先来看看上面两者的get和add方法的区别
先来看看ArrayList add方法
public boolean add(e e e){
保证容量(size+1);//递增modCount!!
element data[size++]= e;
返回true
}
保证能力测试提示:这个函数是什么意思?就看它
public void保证容量(int min capacity){
mod count++;
int old capacity = element data . length;
if(min capacity > old capacity){
Object old data[]= element data;
int new capacity =(old capacity * 3)/2+1;
if(new capacity < min capacity)
new capacity = min capacity;
// minCapacity通常接近size,所以这是一个win:
element data = arrays . copy of(element data,new capacity);
}
}
事实证明这保证了ArrayList存储的自动增长空。看了代码就知道,ArrayList初始化存储空原来的大小是10,之后会以1.5+1的级数增长。在这个过程中,首先更新原空房间的1.5倍+1的新空房间,然后将原数据复制到新空房间。所以在ArrayList中添加数据的性能低于LinkedList,这是最初的原因。然后在新的ArrayList中,根据实际数据,
接下来看linked list
Public Boolean add(e e){
Add Before(e,header)的Add方法;
返回true
}
private Entry add before(E,Entry Entry){
Entry new Entry =新条目(E,Entry,Entry . previous);
new entry . previous . next = new entry;
new entry . next . previous = new entry;
size++;
modcount++;
返回newEntry
}
是添加doubly LinkedList的操作,是数据结构中必须练习的技能之一。添加的时候只要修改一下指针,就ok了。ArrayList的growth 空之间没有复制数据的步骤,所以总体来说,链表在添加的时候比ArrayList快。
我们来看看ArrayList
public e get(int index){
range check(index)的get方法;
return(E)element data[index];
}
RangeCheck检测访问是否越界,然后直接根据索引下标返回值,真的很快。
我们来看看linked list
public e get(int index){
return entry(index)的get方法。元素;
}
private Entry Entry(int Index){
if(Index < 0 | | Index > = Size)
throw new IndexOutOfBoundsException(" Index:"+Index+
",Size:"+Size);
Entry e = header;
if(index <(size > > 1)){
for(int I = 0;即e = e . next;
} else {
for(int I = size;I >索引;I-)
e = e . previous;
}
return e;
}
一个一个的搜索相对比较慢,但还是优化了。如果要搜索的数字小于或等于大小的一半,则从开始到后面。如果大于尺寸的一半,则是从后到前。和ArrayList相比,LinkedList的get真的慢很多。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JAVA基础MINA基础学习

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情