1.类集实际上就属于动态对象数组,在实际开发之中,数组的使用出现的几率并不高,因为数组本身有一个最大的缺陷:数组长度是固定的。
2.类集有两大接口,Collection 和 Map。
Collection
3.Collection有两个子接口,List和Set
List
4.list元素可重复,有子类ArrayList(使用率80%),Vector,LinkedList
5.get()方法是List子接口提供的。如果现在操作的是Collection接口,那么对于此时的数据取出只能够将集合变为对象数组操作。
6.请解释ArrayList与Vector区别
- 历史时间:ArrayList是从JDK1.2提供的,而Vector是从JDK1.0就提供了。
- 处理形式:ArrayList是异步处理,性能更高;Vector是同步处理,性能较低。
- 数据安全:ArrayList是非线程安全;Vector是性能安全。
- 输出形式:ArrayList支持Iterator、ListIterator、foreach;Vector支持Iterator、ListIterator、foreach、Enumeration。
7.在以后使用的时候优先考虑ArrayList,因为其性能更高,实际开发时很多时候也是每个线程拥有自己独立的集合资源。如果需要考虑同步也可以使用concurrent包提供的工具将ArrayList变为线程安全的集合(了解)。
8.ArrayList和LinkedList的区别
ArrayList封装的是一个数组,可以初始化数组长度,不够时动态扩充,时间复杂度为1;
LinkedList封装的是一个链表,时间复杂度为n。
Set
9.Set有两个子类:HashSet(无序存储)、TreeSet(有序存储)
10.TreeSet
- 既然TreeSet子类可以进行排序,所以我们可以利用TreeSet实现数据的排列处理操作。此时要想进行排序实际上是针对于对象数组进行的排序处理,而如果要进行对象数组的序,对象所在的类一定要实现Comparable接口并且覆写compareTo()方法,只有通过此方法才能知道大小关系。
public int compareTo(Person o) {
if (this.age > o.age ) {
return 1 ;
}else if (this.age < o.age ){
return -1 ;
}else {
return this.name.compareTo(o.name) ;
}
}
- 需要提醒的是如果现在试用Comparable接口进行大小关系匹配,所有属性必须全部进行比较操作
11.重复元素判断
hashCode () & equals () 的关系就像 f(x) & x
12.集合输出
- Iterator迭代输出
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
- ListIterator双向迭代接口
ListIterator<String> listIterator = list.listIterator() ;
System.out.print("从前向后输出: ") ;
while (listIterator.hasNext()) {
System.out.print(listIterator.next()+"、") ;
}
System.out.print("\n从后向前输出: ") ;
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous()+"、") ;
}
- Enumeration 枚举输出
Enumeration<String> enumeration = vector.elements() ;
while (enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement()) ;
}
- foreach 输出
Map
13.Map有四个子类:HashMap,HashTable,TreeMap,ConcurrentHashMap
-
HashMap:性能较高,线程不安全,异步处理,基于哈希表和红黑树实现.在多线程情况下使用会产生死锁,cpu飙到100%,多线程情况下使用ConcurrentHashMap,允许key,value为null.
-
HashTable:同步处理,线程安全,性能较低,锁的是整个哈希表,读读互斥.key,value均不为null
-
TreeMap:性能较高,线程不安全,异步处理,基于红黑树实现,只允许value为空.
-
ConcurrentHashMap:线程安全且高效,key,value均不为null.
14.Map集合使用Iterator输出
// 1.将Map集合转为Set集合
Set<Map.Entry<Integer,String>> set = map.entrySet() ;
// 2.获取Iterator对象
Iterator<Map.Entry<Integer,String>> iterator = set.iterator() ;
// 3.输出
while (iterator.hasNext()) {
// 4.取出每一个Map.Entry对象
Map.Entry<Integer,String> entry = iterator.next() ;
// 5.取得key和value
System.out.println(entry.getKey()+" = " +entry.getValue()) ;
}