1、Collection包含List和Set
List:
ArrayList:底层数据结构使用的是数组结构。特点:查询速度快但增删很慢。
线程不同步。数组默认长度10,当元素数超过10,就new一个新
的数组,长度增长50%。将元素copy过来然后加上新元素
LinkedList:底层使用的是链表数据结构。特点:查询慢增删快
Vector:底层是数组数据结构(Vector是1.0,集合框架是1.2出现的),功能
与ArrayList相同。但是线程同步。低效。数组默认长度10,当元
素数超过10,就new一个新的数组,长度增长100%。将元素
copy过来然后加上新元素
Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
Set集合功能与Collection功能一致
HashSet:底层数据结构是哈希表
TreeSet:底层数据结构式二叉树
2、二者区别
List:元素师有序的,元素可以重复,因为该集合体系有索引。
Set:元素是无序的,元素不可以重复。
3、ArrayList (迭代器) 与Vector(枚举是Vector特有的取出方式)取出方式
Vector示例:
/*
枚举就是Vector特有的取出方式
发现枚举和迭代很像
其实枚举和迭代是一样的
因为枚举的名称以及方法的名称都过长
所以被迭代器取代了
枚举就用的少了
*/
class VectorDemo
{
public static void main(String[] args)
{
Vector v = new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en = v.elements();
while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}
}
ArrayList示例:
Iterator的设计原理:
把集合中取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素。
那么取出方式就被定义成了内部类。
而每一个容器的数据结构不同。
所以取出的动作细节也不一样,但是都有共性内容:判断和取出,那么可以将其共性抽取。
那么这些内部类都复合一个规则,该规则是Iterator接口。
如何获取集合的取出对象,通过一个对外提供的方法iterator();
*/
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
//创建一个集合容器,使用Collection解扣子的子类,ArrayList
ArrayList al = new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
ArrayList al2 = new ArrayList();
al2.add("java2");
al2.add("java3");
al2.add("java6");
al2.add("java7");
//
Iterator it = al.iterator();//获取迭代器,用于去除集合中的元素。
sop(it.next());//取出集合中下一个元素
while(it.hasNext())//判断下面是否还有元素,返回boolean
{
it.next();
}
for(Iterator it = al.iterator();it.hasNext();)
{
sop(it.next());
}
//取交集
al.retainAll(al2)//al中只会保留和al2中相同的元素,al与al2的交集
//去交集
al.removeAll(al2);//al中保留al2中所没有的元素,即去掉al中二者的交集,但是al2不变
//获取个数
sop("size:"+al.size());
//打印集合中的对象
sop(al);//会依次打印出集合中所有的对象
//删除元素
al.remove("java3");//删除集合中的java3元素
al.clear();//删除集合中所有元素,清空集合。
//判断元素
sop(al.contains("java2");//al中是否包含java2,返回boolean
sop(al.isEmpty());//al是否为空,返回boolean
}
public static void sop(Object obj)
{
System.out.println(obj):
}
}