集合
我们用数组来存储数据,数组的长度一旦固定就没有办法修改了,但是我们有时并不知道到底需要存放多少数据。如果我们要在数组中增加或删除操作会移动大量元素的位置,并且一个数组只能存放一种数据类型。
集合(容器)可以帮助我们解决上面提到的一些问题。
总结图
基本概念
Java容器类类库主要划分为两个不同的概念
- Collection, 是一个存放独立元素的序列,它是一个接口。它还有几个子接口List(按插入顺序保存元素),Set(不能有重复元素),Queue(按照排队规则来确定对象产生的顺序,通常与被插入顺序相同)
- Map,存放 一组一组的键值对,允许使用键来查找值。
我们需要在创建集合时指定所使用的精确类型。
List<Apple> list = new ArrayList<Apple>();
使用这种方式创建集合的时候需要注意,当我们需要使用具体类的额外方法时不能向上转型。
添加元素
Java中Arrays和Collections类都有很多使用的方法,可以在一个Collection中添加元素。
public class AddingGroup {
public static void main(String[] args) {
Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1,2,3,4));
Collection<Integer> collection2 = new ArrayList<Integer>();
//Collections.addAll()可以接收Collection对象,数组或一个由逗号分割的列表,首选
Collections.addAll(collection2,new Integer[]{
1,2,4});
Collection<Integer> collection3 = new ArrayList<Integer>();
//collection.addAll()只能接收Collection对象作为参数
//collection3.addAll(new Integer[]{123,123})
collection3.addAll(new ArrayList<>(Arrays.asList(123,123)));
//这样写看似没有什么问题,如果视图使用add()或者delete()来操作collection对象,在运行时会报错
//原因是,Arrays.asList()虽然可以当作是List,但是其底层表示的还是数组,因此不能调整尺寸
Collection collection4 = Arrays.asList(1,2,3,4);
collection4.add(5);
for (Object o : collection4) {
System.out.println(o);
}
}
}
List
有两种类型的List,基本的ArrayList,它擅长随机访问元素,但是在中间插入或删除元素时较慢。另一种是LinkedList,中间插入或删除的代价低,提供了优化的顺序访问,随机访问较慢。
public class Pets {
static List<Pet> arrayList(){
List<Pet> petList = new ArrayList<Pet>();
petList.add(new Pet("Rat"));
petList.add(new Pet("Manx"));
petList.add(new Pet("Mutt"));
petList.add(new Pet("Mouse"));
petList.add(new Pet("Pug"));
petList.add(new Pet("Cymric"));
petList.add(new Pet("Pug"));