[JAVA]《Java 核心技术》(三)泛型、集合
1. Logger
层次
和配置
2. 泛型
意味着编写的代码可以被很多不同类型的对象所重用。
3 .extends
eg: T extends Comparable
T extends A & B
4. 虚拟机没有泛型,擦除。
5. 通配符
?
? extends A
6. super
===============
7.集合
8. 迭代器接口
获得下个元素。 next()
判断是否有下一个元素 hasNext()
Collection<String> c =..
Interator<String> iter = c.iterator()
while(iter.hasNext()){
String ele = iter.next();
String ele = iter.next();
}
//删除 iter.remove()
迭代器是占位置的,是两个元素之间的纽带,虽然删除了某个元素,但这个迭代器纽带仍然维持的。所以不能2次连续调用remove
iter.remove()
iter.remove()
或用for
for (String element : c){
}
9 链表
List<String> staff = new LinkedList<String>();
staff.add("Amy")
staff.add("Bob")
Iterator iter = staff.iterator()
String first = iter.next()
String second = iter.next()
iter.remove()
listIterator可以反向遍历。
10.ArrayList
动态再分配
11.散列集
eauals,hashCode要对应
不关心顺序的时候,用hashSet
12. TreeSet
SortedSet<String> sorter = new TreeSet<String>();
将一个元素添加到树种要比添加到散列中蛮。与将元素添加到数组或链表的正确位置上还是要快很多的。
树中 n 个元素,log 2N次
TreeSet比HashSet慢,但可以自动地对元素进行排序。
13.队列与双端队列
Queue
Deque
14 优先级队列
PriorityQueue
15 映射表
Map,HashMap,TreeMap,SortedMap
keySet()
for(Map.Entry<String, Employee> entry: staff.entrySet()){
String key = entry.getKey();
Employee value = entry.getValue();
}
put方法覆盖
containsKey
containsValue
values()
16 弱散列映射表
WeakHashMap
比如有些键已经不再使用,但由于整个散列表是活动的,所以垃圾回收期不回收他们。
周期性检查若引用
LinkedHashSet
LinkedHashMap
EnumSet
EnumSet<Weekday> all = EnumSet.allOf(Week.class)
EnumMap
EnumMap<Weekday,Employee> persionInCharge = new EnumMap<Weekday, Employee> (Weekday.class);
IdendifyHashMap
标识散列映射表
键的散列值不是用hashCode来计算的,是用System.identityHashCode方法计算的
根据内存地址来计算,即用的 == ,而不是equals
在实现对象遍历算法(对象序列化)时,这个类非常有用,可以用来跟踪每个对象的遍历状况。
17. 框架
集合有两个基本的接口
Collection和Map
Iterable
Collection
List, Set, Queue
SortedSet ,Deque
Map
SortedMap
Iterator
ListIterator
RandomAccess接口
AbstractXX
集合框架中的遗留类
List
AbstractList
Vector -->RandomAccess
Stack
Map
Hashtable
Properties
18 视图与包装器
1.轻量级包装器
Arrays.asList()方法
注意:返回的不是一个ArrayList,是一个视图对象,带有访问底层数组的get/set方法
改变数组大小的所有方法都会抛异常。
subList()
clear()
视图机制有助于确保常规集合的线程安全
Collections.checkedList()
19批操作
求集合交集 retainAll
removeAll
20 集合与数组之间的转换
数组 --> 集合 asList
集合 --> 数组 toArray(). 注意 类型是 Object []
或者 String []values = staff.toArray(new String[staf.size()])
但不能 String []values = (Object []) staff.toArray();这样编译不错误,但运行会抛异常的。
21.算法
max
sort排序
Collections类的sort方法可以实现了List接口的结合进行排序
可以指定排序方法的
Comparator<Item> iterComp = new Comparator<Item>(
{
public int compare(Item a, Item b){
return a.partNumber - b.partNumber;
}
}
)
Collections.sort(items,iterComp);
Collections.sort(staff,Collections.reverseOrder());
Collections.shuffle()
打乱顺序
22. 二分查找
Collections.binarySearch()
23. BitSet