JAVA容器小结

JAVA中的容器提供了非常完善的方法来保存对象,你可以使用这些工具来解决大数据量的问题。下面是笔者在开发中用到过的一些容器总结如此。

1 ArrayList

使用ArrayList非常简单:创建一个实例,用add()插入对象,然后用get()访问这些对象,此时需要索引,就象数组一样,但是不需要方括号,ArrayList还有size()方法,从而可以知道ArrayList的大小,也可以避免因为越界而引发错误。另外,ArrayList长于随机访问元素,但是在List的中间插入和移处元素时较慢。下面是ArrayList的例子(来自thinking in java):

/**/ /*
*@(#)AppleAndOrangesWithGenerics.java1.0May17,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

package holding;

import java.util.ArrayList;

public class AppleAndOrangesWithGenerics ... {

publicstaticvoidmain(String[]args)...{
ArrayList
<Apple>apples=newArrayList<Apple>();
for(inti=0;i<3;i++)...{
apples.add(
newApple());
}


for(inti=0;i<apples.size();i++)
System.out.println(((Apple)apples.get(i)).id());

for(Applec:apples)
System.out.println(c.id()
+"-");
}

}

/**/ /*
*@(#)ListFeatures.java1.0May17,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

package holding;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import typeinfo.pets. * ;

public class ListFeatures ... {

publicstaticvoidmain(String[]args)...{
Randomrand
=newRandom(47);
List
<Pet>pets=Pets.arrayList(7);
System.out.print(
"1:"+pets);
System.out.println();
Hamsterh
=newHamster();
pets.add(h);
System.out.print(
"2:"+pets);
System.out.println();
System.out.print(
"3:"+pets.contains(h));
System.out.println();
pets.remove(h);
Petp
=pets.get(2);
System.out.print(
"4:"+pets.indexOf(p));
System.out.println();
Petcymric
=newCymric();
System.out.print(
"5:"+pets.indexOf(cymric));
System.out.println();
System.out.print(
"6:"+pets.remove(cymric));
System.out.println();
System.out.print(
"7:"+pets.remove(p));
System.out.println();
System.out.print(
"8:"+pets);
System.out.println();
pets.add(
3,newMouse());
System.out.print(
"9:"+pets);
System.out.println();
List
<Pet>sub=pets.subList(1,4);
System.out.print(
"sublist:"+sub);
System.out.println();
System.out.print(
"10:"+pets.containsAll(sub));
System.out.println();
Collections.sort(sub);
System.out.print(
"sortedsublist:"+sub);
System.out.println();
System.out.print(
"11:"+pets.containsAll(sub));
System.out.println();
Collections.shuffle(sub,rand);
System.out.print(
"shufflesublist:"+sub);
System.out.println();
System.out.print(
"12:"+pets.containsAll(sub));
System.out.println();
List
<Pet>copy=newArrayList<Pet>(pets);
sub
=Arrays.asList(pets.get(1),pets.get(4));
System.out.print(
"sub:"+sub);
System.out.println();
copy.retainAll(sub);
System.out.print(
"13:"+copy);
System.out.println();
copy
=newArrayList<Pet>(pets);
copy.remove(
2);
System.out.print(
"14:"+copy);
System.out.println();
copy.removeAll(sub);
System.out.print(
"15:"+copy);
System.out.println();
copy.set(
1,newMouse());//Replaceanelement
System.out.print("16:"+copy);
System.out.println();
copy.addAll(
2,sub);
System.out.print(
"17:"+copy);
System.out.println();
System.out.print(
"18:"+pets.isEmpty());
System.out.println();
pets.clear();
System.out.print(
"19:"+pets);
System.out.println();
System.out.print(
"20:"+pets.isEmpty());
System.out.println();
pets.addAll(Pets.arrayList(
4));
System.out.print(
"21:"+pets);
System.out.println();
Object[]o
=pets.toArray();
System.out.print(
"22:"+o[3]);
System.out.println();
Pet[]pa
=pets.toArray(newPet[0]);
System.out.print(
"23:"+pa[3].id());
System.out.println();
}

}

运行结果:

1 :[Rat,Manx,Cymric,Mutt,Pug,Cymric,Pug]
2 :[Rat,Manx,Cymric,Mutt,Pug,Cymric,Pug,Hamster]
3 : true
4 : 2
5 : - 1
6 : false
7 : true
8 :[Rat,Manx,Mutt,Pug,Cymric,Pug]
9 :[Rat,Manx,Mutt,Mouse,Pug,Cymric,Pug]
sublist:[Manx,Mutt,Mouse]
10 : true
sortedsublist:[Manx,Mouse,Mutt]
11 : true
shufflesublist:[Mouse,Manx,Mutt]
12 : true
sub:[Mouse,Pug]
13 :[Mouse,Pug]
14 :[Rat,Mouse,Mutt,Pug,Cymric,Pug]
15 :[Rat,Mutt,Cymric,Pug]
16 :[Rat,Mouse,Cymric,Pug]
17 :[Rat,Mouse,Mouse,Pug,Cymric,Pug]
18 : false
19 :[]
20 : true
21 :[Manx,Cymric,Rat,EgyptianMau]
22 :EgyptianMau
23 : 14

2 LinkedList

LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(比如插入、删除)时要比ArrayList更加的高效,但是在随机访问操作方面要逊色一些。此外,LinkedList还添加了可以使其用作栈、队列或双端队列的方法。下面是关于LinkedList使用的例子:

/**/ /*
*@(#)LinkedListFeatures.java1.0May18,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

package holding;

import java.util.LinkedList;
import static net.mindview.util.Print. * ;

import typeinfo.pets.Hamster;
import typeinfo.pets.Pet;
import typeinfo.pets.Pets;
import typeinfo.pets.Rat;

public class LinkedListFeatures ... {

publicstaticvoidmain(String[]args)...{

LinkedList
<Pet>pets=newLinkedList<Pet>(Pets.arrayList(5));
print(pets);
print(
"pets.getFirst():"+pets.getFirst());
print(
"pets.element():"+pets.element());
print(
"pets.peek():"+pets.peek());

print(
"pets.remove():"+pets.remove());
print(
"pets.removeFirst():"+pets.removeFirst());
print(
"pets.poll():"+pets.poll());
print(pets);

pets.addFirst(
newRat());
print(
"AfteraddFirst():"+pets);
pets.offer(Pets.randomPet());
print(
"Afteroffer():"+pets);
pets.add(Pets.randomPet());

print(
"Afteradd():"+pets);
pets.addLast(
newHamster());
print(
"AfteraddLast():"+pets);
print(
"pets.removeLast():"+pets.removeLast());
}

}

运行结果:

[Rat,Manx,Cymric,Mutt,Pug]
pets.getFirst():Rat
pets.element():Rat
pets.peek():Rat
pets.remove():Rat
pets.removeFirst():Manx
pets.poll():Cymric
[Mutt,Pug]
AfteraddFirst():[Rat,Mutt,Pug]
Afteroffer():[Rat,Mutt,Pug,Cymric]
Afteradd():[Rat,Mutt,Pug,Cymric,Pug]
AfteraddLast():[Rat,Mutt,Pug,Cymric,Pug,Hamster]
pets.removeLast():Hamster

List的排序和查询:List排序和查询所使用的方法与对象数组所使用的相应方法有相同的名字和语法,只是用Collections的static方法代替Arrays的方法而已。例子如下:

/**/ /*
*@(#)ListSortSearch.java1.0May18,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

package containers;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.Random;

import containers.Utilities;
import static net.mindview.util.Print. * ;

public class ListSortSearch ... {

publicstaticvoidmain(String[]args)...{
List
<String>list=newArrayList<String>(Utilities.list);
list.addAll(Utilities.list);
print(list);
Collections.shuffle(list,
newRandom(47));
print(
"shuffled:"+list);
ListIterator
<String>it=list.listIterator(10);
while(it.hasNext())...{
it.next();
it.remove();
}

print(
"Trimmed:"+list);
Collections.sort(list);
print(
"sorted:"+list);
Stringkey
=list.get(7);
intindex=Collections.binarySearch(list,key);
print(
"Locationof"+key+"is"+index+
",list.get("+index+")="+list.get(index));
Collections.sort(list,String.CASE_INSENSITIVE_ORDER);
print(
"Case-insensitivesorted:"+list);
key
=list.get(7);
index
=Collections.binarySearch(list,key,String.CASE_INSENSITIVE_ORDER);
print(
"Locationof"+key+"is"+index+
",list.get("+index+")="+list.get(index));
}

}

你可能感兴趣的:(java)