容器类:用来解决数组具有固定尺寸而使得灵活性受限的问题。基本的容器类(集合类)有: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]