黑马程序员_集合学习1
在集合框架中,最顶层的是Collection,它有两个子接口,List和Set
在List和Set接口下,又有很多特殊的容器。因为每一个容器对数据的存储方式都有不同。这个存储方式称之为:数据结构。自身具备的特点不同。
作为一个集合,应该具有的方法:增删改查
在collection中,存在这样一些抽象方法
add(),增加一个元素
addAll(),一次增加一堆元素(实现并集)
remove 删除一个元素
removeAll 删除一堆元素(实现差集)A-B
retainAll 保留两个集合中共有的元素。交集
在集合中存储的都是对象的引用(地址)。
当我们取出元素中的集合时候,就可以使用迭代器,其实就是集合取出元素的方式
每个集合中有各自特定的取出方式,也就有一个特定的迭代器。取出这个类就定义在集合的内部。也就是用来取元素,在集合内部操作,这个迭代器内部类抽取了一些共性的方法,叫做Iterator接口,这个接口定义了抽象的方法,在各自不同的数据结构中,取出和判断的方式不同,故各个数据结构实现了自己特定的迭代器对象。可以使用 数据结构对象.iterator();得到其内部实现的迭代器。
Collection中
List:元素是有序的,元素可以重复。因为该集合体系有索引。可以在指定位置对元素进行操作。凡是带角标的,都是该集合下特有的操作方式。
Set:元素是无序的,元素不可以重复。
ArrayList<String>al = newArrayList<String>();
al.add("01");
al.add(0,"dsf2");
ArrayList<String> al1 = newArrayList<String>();
al1.add("fds0");
al1.add("dfs1");
al.addAll(0,al1);
al.remove(0);
al.set(0,"nihao");
al.get(0);
System.out.println(al.subList(0,2));
System.out.println(al);
需求:现在要使用迭代器去集合中的元素取出,并进行一些操作。
但是,我们在使用迭代器操作集合对象的时候,再使用集合对象对元素进行操作
会出现并发操作的安全隐患。不能对同一个集合,进行多种同时操作,不能既使用集合,又使用迭代器操作同一组元素。
列表迭代器:
Remove从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
也就是删除next得到的那个元素,不能同时使用两次remove。
List集合特有的迭代器,ListIterator是Iterator子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生并发修改异常。
所以在迭代时候,只能用迭代器的方法操作元素,可以iterator方法有限。
只能对元素进行判断,取出,删除的操作。
如果想要其他的操作,如添加,修改,就需要使用子接口。
该接口通过List.ListIterator()方法获取。
特点:在遍历过程中的增删改查。。。。十分的重要
ArrayList的特点:查询,修改速度很快,但是增加,删除元素很慢。线程不同步
LinkedList:增删的速度很快,查询比较慢
Vector :底层是数组数据结构,线程同步。