对于许多初学者,很多形式类似的表达式都是比较懵逼的,比如说string和List<string>、List和ArrayList、List<String> list = new ArrayList<String>();下面从三组对比说说这些表达式它们之间的区别。

string和List<string>的区别

String是一个引用数据类型,可以存储字符串,例如:

String s = "你好";

而List<String>是集合类接口,由于泛型<>约束所以是一个只能存取String类型的集合。

List<String> list = new ArrayList<String>();
list.add("你好");
list.add("hello");

List和ArrayList的区别

List是一个接口,是Collection接口的一个子接口,是一个有序的集合。

ArrayList是List的一个实现类,可以实现数组大小的可变,可以很方便的进行增加和删减数组内元素的操作。

1 List<NameValuePair> paraList = new ArrayList<>();
2 paraXmlList("cfgXml", dataxmlPath, paraList);
3 paraList.add(new BasicNameValuePair("productid", productid));//(此处对List进行添加了数据)

List list=new ArrayList();这种形式成为向上转型,ArrayList实现了List接口,可以看成是从List继承而来,一个子类的对象可以指向它父类。比如,狗从动物继承而来,狗是一只动物,所以狗的对象可以当作一只普通的动物来看待。

List<String> list=new ArrayList<String>();

然后再来说说List<String> list=new ArrayList<String>();

为甚麼要声明为List 而不是ArrayList<String>?

List是集合最大的父类,它包含了ArrayList。

如果直接声明为ArrayList<String> list=new ArrayList<String>()这个也没有问题,但是不推荐,应为这样显得不是很灵活,因为List下除了ArrayList还有LinkList等他们都实现了List里面的方法。

而声明成:List<String> list=new ArrayList<String>();这样的形式使得list这个对象可以有多种的存在形式

比如要用链表存数据的话直接用LinkedList,使用ArrayList或者Vector直接通过list = new LinkedList<String>();就可以了,这样让list这个对象活起来了。很多需求只能用一个list,内存有限,或者线程同步,不能有更多的集合对象,使得List总的接口来管理对象。