java集合框架概述

泛型

1、相信大家对集合框架都有一定的了解,由于自己老是混淆这一块内容的实现方式,故在此通过自己的阅读thinking in java一书后在此做一些总结,以便回顾。
在javase5之前,由于没有泛型的概念,程序员可以向容器中添加任意类型的对象。来看如下例子:

//创建dog类
class Dog{
    String dog = "dog";
}

//创建cat类
class Cat{
}
public class Test {
    public static void main(String [] args){
        //创建一个容器
        ArrayList al = new ArrayList();
        //向容器中添加三个dog对象
        for(int i = 0;i<3;i++){
            al.add(new Dog());
        }
        //添加一个cat对象
        al.add(new Cat());

        //取出容器中的对象调用其字段
        for(int i = 0;i<al.size();i++){
            String string = ((Dog)al.get(i)).dog;
            System.out.println(string);
        }
    }
}

这么做会带来一个麻烦,就像如上代码片段,当我取出容器中的对象调用字段的时候,由于没有泛型概念,ArrayList里面保存的全部都是object对象,要获取dog对象,就要进行强制转换,而进行强制转换的时候又会带来一个问题,我的cat对象没有办法转换为dog对象。在以上最后一个for循环中,我将所有对象强制转换为dog对象,注意到里面还有一个cat对象,但是程序在编译期是不会报错的,只有在运行的时候才会抛异常。
这给程序员带来极大的痛苦。
2、javase5之后泛型的出现,便解决了以上问题。泛型机制会让你在创建容器的时候指定对象,之后添加对象的时候必须为此对象或者子类对象,注意子类对象也是可以添加进去的。

class Car {
}

class Audi extends Car {
}

class BMW extends Car {
}

class Benz extends Car {
}

public class Test {
    public static void main(String[] args) {
        ArrayList<Car> al = new ArrayList<Car>();
        al.add(new Audi());
        al.add(new BMW());
        al.add(new Benz());
        for (Car car : al) {
            System.out.println(car);
        }
    }
}

输出结果为:
这里写图片描述
如以上代码片段,car的三个子类对象也可以添加到容器中,这里使用增强型for循环来输出子类对象,增强型for循环本质上是一个迭代器,迭代器的概念后面会讲到。
在观察输出结果,打印结果由Object默认的toString()方法产生,@左边为类名,后面是该对象的无符号十六进制的散列码,这散列码由hashCode()方法产生,后面也会讲到。

容器类类库

这里写图片描述
以上便是简化的容器类类库,也是老掉牙的一张图了,图中的接口和实现类也是非常常用的,务必掌握。下面简单介绍几个接口和类:
1)Collection:下面有两个非常重要的接口,List和Set,List必须按照插入顺序保存元素,而set不允许出现重复元素。List接口下两个重要实现类,ArrayList和LinkedList,两者的主要区别在于数据结构的不同,ArrayList使用数组数据结构,插入效率较低,但查询速度很快。LinkedList使用链表数据结构,插入效率高,但查询速度相对慢。另外,AbstractCollection类是Collection的一个直接子类,它实现了Collection的所有方法,而且没有添加任何其他方法。
2:)Map:Map是使用键值对来存储元素的一个强大的接口,它将数字和对象关联在一起,并且提供了许多方法供我们访问。
3)Iterator和ListIterator:迭代器和列表迭代器。差别在于接口ListIterator定义了更多的方法。
此外还有两个工具类,Collections和Arrays,这两个类中也定义了许多方法,可以实现集合和数组的转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值