------- android培训、java培训、期待与您交流! ----------
1、集合类。
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行储存,集合就是储存对象最常用的一种方式。
数组和集合类同时容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象。
集合类的特点。
集合只用于存储对象,集合场地是可变的,集合可以存储不同类型的对象。
add方法的参数类型是Object,以便于接受任意类型对象。
集合中存储的都是对象的引用(地址)
2、all.retainAll(al2);取al1和al2 的交集存入al1中。al1只会保留和al2相同的元素。
3、Iterator迭代器。
hasNext() 如果仍有元素可迭代,返回true
next() 返回迭代的下一个元素
什么是迭代器呢?其实就是集合的取出元素的方式。
4、Collection
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--ArrayList:底层的数组结构使用的是数组结构。特点:查询速度快。但是增删稍慢,线程不同步。
判断元素相同或存储元素是依赖equals
|--LinkedList:底层使用的是链表数组结构。特点:增删速度快,查询速度慢。
|--Vector:底层是数组数据结构。线程同步。查询增删都慢。被ArrayList替代了。
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。
|--TreeSet
List
特有方法:凡是可以操作角标的方法都是该体系的特有方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
List集合特有的迭代器,ListIterator是Iterator的子接口。
在迭代时,不可以通过几何对象的方法操作集合中的元素,会发生
ConcurrentModificationException(并发操作异常)异常。
所以,在迭代器时,只能运用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其他的操作,如添加修改等,就需要使用其子接口,ListItetator。该接口只能通过List集合的Iterator方法获取。
hasPrevious()反向遍历,如果有多个元素,则返回true
5、vector中的枚举。
枚举就是Vector特有的取出方式。发现枚举和迭代器很像。
6、LinkedList:特有方法
addFirst();
addLast();
getFirst();
getLast();获取元素,但不删除元素。
removeFirst();
removeLast();获取元素,但是元素被删除。
如果集合中没有元素,或出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
添加元素
peekFirst();
peekLast();
获取元素,但不删除元素,如果集合中没有元素,则返回null。
pollFirst();
pollLast();
获取元素,但是删除元素,如果集合中没有元素,则返回null。
7、List集合判断元素是否相同,依据是元素的equals方法。
8、【开发建议】
如果取到的元素很多,涉及到频繁的增删操作的时候,用LinkedList。
涉及到增删操作但是不频繁,用ArrayList或者LinkedList
涉及到增删也涉及到查询,建议使用ArrayList
9、|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。
HashSet是如何保证元素的唯一性呢?
是通过元素的两个方法,hashCode和equals来完成,如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashCode值不同,不会调用equals。
【注意】对于判断元素是否存在,以及删除等操作,以来的方法时元素的hashCode和equals方法。
|--TreeSet
Set存入和取出是按照哈希表存取的。