Collection集合框架和List集合
1.什么是集合?
能够存储多个同类型的基本数据类型的容器我们叫数组,那么可以存储多个同类型对象的容器我们就称之为集合!
什么是Collection集合框架,通过下面这个图来说明!
Collection是一个根接口,而它旗下又很多个子接口继承了它,其中两个最重要的子接口分别的是List和Set,它们继承了Collection接口之后,自己又有自己的新特性,List接口下有3个子类实现了它,Set接口下有2个子类实现了它。它们之间的这种层级关系就形成了一个框架,我们就叫它Collection集合框架!
为什么会出现这么多种集合呢?
因为每一个容器对数据的存储方式都不同。这个存储方式我们称之为数据结构!
2.List集合和Set集合
List和Set都是继承了Collection接口
不同的话就是实现了List集合的类它存储的元素都是有序的,而且有索 引,可以出现重复的元素,而Set集合的元素是无序的,没有索引,不能出现重复元素。
2-1.List集合的子类:
List有3个比较重要的子类,分别是ArrayList,LinkedList,Vector。
ArrayList和Vector差不多,它们最大的区别就在ArrayList是不同步的,Vector是同步的,ArrayList的效率比较高,所以我们一般都ArrayList。
ArrayList的特点:它的底层是数组的结构,所以它和数组一样,每一个元素都有索引,而且它是有序的,集合在可以存在重复的元素。因为底层是数组结构的,所以它的查询元素速度快,但是增删元素的速度就相对较慢。
//通过一段代码来看看ArrayList的创建和一些基本操作
class demo01
{
public static void main(String[] args)
{
ArrayList arr = new ArrayList();//创建对象
ArrayList arr1 = new ArrayList();
arr.add("java1");//添加元素
arr.add("java2");
arr.add("java3");
arr.add("java4");
arr1.add("java1");//添加元素
arr1.add("java2");
arr1.add("java6");
arr1.add("java5");
Iterator it = arr.iterator();//获取一个迭代器 用于取元素
while(it.hasNext()) //判断容器是否为空 返回boolean
{
sop(it.next());//返回下一个元素
}
/*
//另一种写法 能减少内存的使用
for (Iterator it = arr.iterator(); it.hasNext(); )
{
sop(it.next());
}*/
sop(arr);//原来的元素
cc.p(arr.containsAll(arr1));//是否包含arr这个集合
cc.p(arr.size());//集合的长度
arr.removeAll(arr1);//去除了和arr1相同的部分
sop(arr);
arr.retainAll(arr1);//只保留和arr1相同的部分
sop(arr);
}
//一个打印的小方法
public static void sop(Object obj)
{
System.out.println(obj);
}
}
LinkedList的特点:它的底层是链表的结构,所以它和链表一样,每一个元素都有索引,而且它是有序的,集合在可以存在重复的元素。因为底层是链表结构的,所以它的查询元素速度较慢,但是增删元素的速度非常快。
//通过一段代码来看看LinkedList创建和的方法
class myList//操作和创建LinkedList集合的类
{
private LinkedList link;
myList()
{
link = new LinkedList();//构造函数创建LinkedList类
}
public void myAdd(Object obj) ;//写入元素
{
link.addLast(obj);
}
public boolean myEmpty() ;//判断容器里是否为空
{
return link.isEmpty();
}
public Object myRemove() ;//取出容器里的元素 从最后一个开始取
{
return link.pollLast();
}
}
class demo03
{
public static void main(String[] args)
{
myList link = new myList();//创建一个LinkedList对象
link.myAdd("java1");//往里面添加元素
link.myAdd("java2");
link.myAdd("java3");
link.myAdd("java4");
while(!link.myEmpty())//删除所有元素
{
System.out.println(link.myRemove());
}
}
}
总结:
ArrayList和LinkedList都可以存储有序的带有索引的元素,如果是查找动作比较多的话,可以使用ArrayList!如果是经常要对集合里的元素进行操作的话那用LinkedList会比较好!