------- android培训、java培训、期待与您交流! ----------
一、体系概述
集合是一种特殊的容器它是用来存放任意类型的对象。长度可变,基本数据类型也可以装入集合。
但其实内部是先自动装箱包装成类对象,然后再存入的。
集合的分类:
- 1.Collection
- List: 可重复, 有存储顺序,有索引
- ArrayList 数组实现, 增删慢, 查找快
- LinkedList 链表实现, 增删快, 查找慢
- Vector 数组实现, 原理和ArrayList相同, 但线程安全
- Set: 不可重复,存取顺序不一致,无索引
- HashSet 底层使用的是哈希表数据结构
- TreeSet 底层是二叉树结构,可以对Set集合中的元素进行排序。
- List: 可重复, 有存储顺序,有索引
- 2.Map 该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
- HashMap 底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。
- TreeMap 底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
- Hashtable 底层是哈希表数据结构。允许使用null键null值,该集合是不同步的。
二、集合框架的一些共性方法
Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);
2,删除
remove(e);
removeAll(collection);
clear();
3,判断。
contains(e);
isEmpty();
4,获取
iterator();
size();
5,获取交集。
retainAll();
6,集合变数组。
toArray();
注意:
1,add方法的参数类型是Object。以便于接收任意类型对象。
2,集合中存储的都是对象的引用(地址)
迭代器:
什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。
迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。
class CollectionDemo
{
public static void main(String[] args)
{
method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();
//添加元素。
al.add("java01");//add(Object obj);
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。
while(it.hasNext())
{
sop(it.next());
}
for(Iterator it = al.iterator(); it.hasNext() ; )
{
sop(it.next());
}
}
}
另外List集合中有自己特有的迭代器
List集合特有的迭代器。ListIterator是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常
所以,在迭代时,只能用迭代器的方法操作元素。可是Iterator方法时有限的。
只能对元素进行判断,取出,删除的操作。
如果想要其他的操作 如:添加,修改等。就需要使用其子接口ListIterator
该接口只能通过List集合的ListIterator方法获取。
class ListIteratorTest
{
public static void main(String[] args)
{
//演示列表迭代器。
ArrayList al = new ArrayList();
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
sop(al);
ListIterator li = al.listIterator();
sop("hasNext():"+li.hasPrevious()); //与hasNext相反。判断反向(从后向前)有没有元素存在。这里结果为false。
//因为指针在开头,指针前没有元素。
while(li.hasNext())
{
Object obj = li.next();
if (obj.equals("java02"))
//li.add("java009");
li.set("java006");
}
sop("hasNext():"+li.hasNext());//结果为false.因为元素都已经取出。指针到了最末尾(最后一个元素后面)
sop("hasNext():"+li.hasPrevious());//这里结果为true。因为指针已经到了最后前面有元素。
while(li.hasPrevious())//逆向遍历所有元素
{
sop("pre::"+li.previous());//逆向取出所有元素。
}
}
}