容器类基础篇(一)

容器类:用来解决数组具有固定尺寸而使得灵活性受限的问题。基本的容器类(集合类)有:List、Set、Queue、Map。

Java容器类类库的用途是用来“保存对象”,这分为两个不同的大类:

1.Collection(集合的根接口)
2.Map:每个槽内保存了两个对象,即键/值对。


它们的区别在于容器中每个“槽”可以保存的元素个数。Collection的每个槽只能保存一个元素。此类容器包括:
1)List:以特定的顺序保存一组元素
2)Set:元素不能重复
3)Queue:只允许在容器的一“端”插入对象,并从另一“端”移除对象

最早在学习泛型类的时候接触过的容器类有:ArrayList。使用add()和get(index)来添加和访问对象,set(index,element)修改对象,size()返回当前容器中添加了多少个元素,相当于长度。注:ArrayList是一个实现了Collection接口的类。

 

复习一下关于ArrayList的两种定义方法:

方法一:ArrayList list = new ArrayList()

这样存进去的对象默认都是Object类型的,但在当使用get取出时必须进行类型转换,否则是Object的引用。

方法二:ArrayList<T> list = new ArrayList<T>()
在最开始就预定义了类型,这样get时就不需要进行显示类型转换。
当指定了类型T时,并不仅限于只能该确切的T类对象放置到容器中,可以向上转型。即可以存放T的子类对象到容器中。

下面是一个ArrayList操作的小例子:

 1 import java.util.ArrayList;
 2 public class A {
 3     public static void main(String[] args) {
 4         ArrayList<Basic> list = new ArrayList<Basic>();
 5         list.add(new Z1());
 6         list.add(new Z2());
 7         list.add(new Z3());
 8         for(Basic b:list){
 9             System.out.println(b);
10         }
11     }
12 }
13 class Basic{}
14 class Z1 extends Basic{};
15 class Z2 extends Basic{};
16 class Z3 extends Basic{};


前面介绍过Collection容器类是用来保存对象的集合,那么如何往Collection中添加对象呢?方法是很多的,下面介绍了4种常见方法:

1.add()
2.Arrays.asList(数组/元素列表): 接受一个数组或者是用逗号分割的元素列表,将其转换成一个List对象。
3.使用静态类Collections中的addAll(collection,数组/元素列表)方法
4.直接用Arrays.asList()输出,将其当作是List。但其实底层还是数组,因此不能调整尺寸。可以用set()来修改元素,但不能用add()添加,否则会报异常。

Collection添加元素的Demo:

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.Collection;
 4 import java.util.Collections;
 5 import java.util.List;
 6 
 7 public class A {
 8     public static void main(String[] args) {
 9         // 元素列表
10         Collection<Integer> c = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
11 
12         // 接受一个数组转换成List
13         Integer[] moreInts = { 6, 7, 8, 9, 10 };
14         c.addAll(Arrays.asList(moreInts));
15 
16         // 使用静态类Collections中的方法
17         Collections.addAll(c, 11, 12, 13, 14, 15);
18 
19         // addAll方法也可以接受数组
20         Collections.addAll(c, moreInts);
21         
22         
23          //foreach方式打印
24           for(Integer i: c){ System.out.print(i+"  "); }
25          
26 
27         // 直接用Arrays.asList()输出
28         List<Integer> list = Arrays.asList(moreInts);
29         list.set(0, 1);
30         /*    
31          * list.add(100);    
32          * 这条编译不通过,原因是底层仍旧是一个数组,不能更改尺寸
33         */
34         
35         //容器类默认打印方式
36         System.out.println(list);
37 
38     }
39 }

容器的默认打印行为:默认调用toString(),打印的结果用中括号括起来。如:上面例子最后一条 [1, 7, 8, 9, 10]

posted on 2012-09-16 21:29  <安之若素>  阅读(269)  评论(0编辑  收藏  举报

导航