持有对象
java实用类库提供了一套相当完整的容器类,其中基本的类型时List、Set、Queue和Map。这些对象类型称为集合类,也可以称之为容器。
泛型和类型安全的容器
ArrayList是最基本最可靠的容器,你可以把它当做“可以自动扩充自身尺寸的数组”来看待。
下面是一个简单的例子:
class Apple{
private static long counter;
private final long id = counter++;
public long id(){return id;}
}
public class Fruts {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList apples = new ArrayList();
for(int i=0;i<3;i++){
apples.add(new Apple());
}
for(int i=0;i<apples.size();i++){
System.out.println(((Apple)apples.get(i)).id());
}
}
}
上面这种方式需要强制转型,下面使用泛型的例子:
class Apple{
private static long counter;
private final long id = counter++;
public long id(){return id;}
}
public class Fruts {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Apple> apples = new ArrayList<Apple>();
for(int i=0;i<3;i++){
apples.add(new Apple());
}
for(int i=0;i<apples.size();i++){
System.out.println(apples.get(i).id());
}
}
}
基本概念
基本上可以分为两种类型:
Collection类型:一个独立元素序列,这些元素都服从一条或多条规则。
- List:必须按照插入的顺序保存元素。
- Set:不能有重复的元素。
- Queue:按照排队规则来确定对象产生的顺序。
Map类型:一组成对的“键值对”对象,允许用“键”来查找“值”。
添加一组元素
java.util包中的Arrays和Collections类中都有很多实用方法,可以在一个Collection 中添加一组元素,注意类名中的s
下面就是添加的例子:
public class AddingGroups {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Integer> collections = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
Integer[] moreints = {6,7,8,9,10};
collections.addAll(Arrays.asList(moreints));
Collections.addAll(collections,11,12,13,14,15);
Collections.addAll(collections,moreints);
List<Integer> list = Arrays.asList(16,17,18,19,20);
list.set(1, 99);
System.out.println(collections);
System.out.println(list);
}
}
容器的打印
下面例子将容器的内容打印出来,便于观察容器的存储方式:
public class PrintCollection {
static Collection fill(Collection<String> collection){
collection.add("A");
collection.add("B");
collection.add("C");
collection.add("C");
return collection;
}
static Map fill(Map<String,String> map){
map.put("A", "1");
map.put("B", "2");
map.put("C", "3");
map.put("C", "4");
return map;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(fill(new ArrayList<String>()));
System.out.println(fill(new LinkedList<String>()));
System.out.println(fill(new HashSet<String>()));
System.out.println(fill(new TreeSet<String>()));
System.out.println(fill(new HashMap<String,String>()));
System.out.println(fill(new TreeMap<String,String>()));
System.out.println(fill(new LinkedHashMap<String,String>()));
}
}
运行结果:
[A, B, C, C]
[A, B, C, C]
[A, B, C]
[A, B, C]
{A=1, B=2, C=4}
{A=1, B=2, C=4}
{A=1, B=2, C=4}
对于这个结果可以看出,Set类型,元素不能重复;Map类型,对于每个键,只存储一次;