Collection FrameWork overview
Collection FrameWork overview
-
为什么要使用集合?
存放多个数据的时候需要数组,但是数组的长度不可变;
并且数组无法保存具有映射关系的数据,比如成绩表:语文–100,数学–100,这种数据看上去很像两个数组,但是这些数据之间具有一定的关联性。所以引入了集合的概念 -
什么是集合?
Java中提供了叫做Java Collection FrameWork的框架,为特定的对象类型 提供了容器,要注意这里的装入容器的只能是对象,对于基本类型的数据(int , long , float , double ),转入容器的时候需要包装成对象类型后(Integer , Long , Float , Double)才能放到容器中(这个过程称之为拆包装 , 解包装)
在集合中保存的只能是对象(对象的引用变量),Java中的集合类主要由两个根接口派生,Collection和Map,这两个接口又包含了一些子接口或者实现类
简单说集合提供了数据之间的映射关系,可变容量的容器。
以下为集合中的要点:
(结构图)
—查看Java api中的util框架,可以看到两个主要接口:Collection和Set
结构为:
AbstractCollection<E>---AbstractCollection<E>---AbstractList<E>
AbstractList三个常用的实现类:ArrayList,Vector,LinkedList前两个是动态数组,LinkedList是链表,主要方法看关于Collection中详细描述
AbstractCollection<E>---AbstractCollection<E>---AbstractSet<E>
Set的翻译是集合,所以在set中是不允许重复的元素添加的,主要的实现类是:
EnumSet,HashSet,TreeSet
提到Java集合,不得不提Java泛型的概念,缺少了泛型的支持,我们在使用Java集合的时候将会多很多工作
按照我的理解,Java集合在设计的时候存储的是对象类型,而这个对象可能是各种各样的,所以在存储在集合中的时候会自动把对象类型转化为object(Object是所有对象的父类),这样Java集合代码就能拥有很好的通用性,但会存在两个主要的矛盾:
(1)存储类型的时候没有任何限制,加入向创建一个存cat类的集合,但也能轻易的将dog类的对象存入
(2)输出时丢失对象类型,需要强制类型转化,增加了编程的难度(容易引发ClassCastException异常)
那么如何解决第一个问题呢?
我们可以尝试手动实现编译时检查类型
import java.util.ArrayList;
import java.util.List;
//定义一个strList类用组合的方式来实现ArrayList
class StrList
{
//定了一个不加泛型的List集合
private List strList = new ArrayList();
//重写strList中的add和get方法
//限制只能添加String类型的元素
public boolean add(String ele)
{
return strList.add(ele);
}
//将对象强制转化为String 类型
public String get(int index)
{
return (String) strList.get(index);
}
//随便写一个方法
public int size()
{
return strList.size();
}
}
//定义测试类,说明这个strList类只能添加String类型
class testStrList
{
public static void main(String []args)
{
StrList lt = new StrList();
lt.add("第一个字符串");
lt.add("第二个字符串");
//尝试将一个int类型的对象添加到strList中,发现报错:classCastException
//lt.add(5);
for(int i=0;i<lt.size();i++)
{
System.out.println(lt.get(i));
}
}
}
这种方法有效的解决了集合中出现的问题(1)(2),但是在对于每种不同类型的对象,都需要定义一种List的子类,再次加大了编程的难度,在JDK5之后,Java引入了一种叫【 参数化类型】Parameterized type的概念,对于以上的String类型的List子类,只需要如下定义:List lt = new ArrayList();
这种【参数化类型】就是泛型。
以上已经建立了集合与泛型的概念,那么我们如何便利存储在集合容器中的对象呢?
Java 中又建立了迭代器的概念,查阅Java api中的Iterator接口,方法概述为:
利用这三个方法就可以实现对集合容器中的对象的遍历
如下代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class IteratorTest
{
public static void main(String []args)
{
//建立一个ArrayList对象
List<String> lt = new ArrayList<>();
lt.add("好好学习");
lt.add("天天向上");
//获取这个集合的迭代器
Iterator it = lt.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
上一篇: 手机建站 4个方法帮你留住客户
下一篇: 企业网站建设的流程以及需要注意的地方
推荐阅读
-
.NET Core/Framework如何创建委托大幅度提高反射调用的性能详解
-
java Collection 之Set使用说明
-
java Collection 之List学习介绍
-
asp.net在iis7中更改网站的.net framework框架版本的方法(图)
-
asp.net在iis7中更改网站的.net framework框架版本的方法(图)
-
java语法ArrayList、LinkedList、HashSet、HashMap、HashTable、Collection、Collections详解
-
Android 往Framework中添加新资源的方法详解
-
java中集合(LinkedList、HashSet、HashMap、HashTable、Collection、Collections)
-
Yii Framework框架获取分类下面的所有子类方法
-
nik collection怎么安装?Google Nik Collection安装破解图文详细教程