`

《Java核心技术(第八版)》笔记之第13章集合

 
阅读更多

13.1 集合接口

1. 使用迭代器Iterator进行访问时,元素被访问的顺序取决于集合类型。如果对ArrayList进行迭代,会从索引0开始,每迭代一次,索引值加1;如果是HashSet,那每个元素将会按照某种随机的次序出现。 (P558)

 

13.2 具体的接口

1.在Java程序设计语言中,所有链表实际上都是双向链接的(doubly linked)---即每个结点还存放着指向前驱节点的引用。 (P562)

2. 为避免集合发生并发修改的异常,请遵循下述简单规则:可以根据需要给容器附加许多的迭代器,但是这些迭代顺只能读取列表。另外,再单独附加一个既能读又能写的迭代器。----即读写分离。(P566)

3. Map中键可以为null,但是值不能为null。 (P584)

4.IdentityHashMap(标识散列映射表)

  在对两个对象进行比较时,IdentityHashMap类使用==,而不是使用equals。也就是说,不同的键对象,即使内容相同,也被视为不同对象。在实现对象遍历算法(如对象序列化)时,这个类非常有用,可以用来跟踪每个对象有遍历情况。 (P588)

 

13.3 集合框架

1.视图与包装器

keySet方法返回一个实现Set接口的类对象,这个类的方法对原映射表进行操作,这种集合称为视图.(P592)

(1). 轻量级集包装器

    Arrays.asList方法,将数组返回为一个可修改但不可更改大小的List

(2) 不可修改视图

   Collections的unmodifiable系统方法,返回不可修改、且不可更改大小的集合接口

(3) 子范围(subList)、同步视图(synchronized)、被检验视图(checkedList)等等

(4)通常,视图具有一些局限性,即可能只可以读、无法改变大小、只支持删除而不支持插入等。如果进行不恰当的操作,受限制的视图就会抛出一个UnspportedOperationException。

2.集合与数组的互换

(1)、数组到集合

   String[] values = ...;

   HashSet(String) staff = new HashSet<String>(Arrays.asList(values));

(2)、集合到数组

   staff.toArray(new String[staff.size()]);

   在这种情况下,没有创建任何数组;也避免了直接使用toArray方法返回Object的现象。

 

13.4 算法

 1. 如果想按照降序对列表进行排序,可以使用一种非常方便的静态方法Collections.reverseOrder()。 (P601)

 e.g:Collections.sort(staff,Collections, reverseOrder())

2、一些常用的简单算法

shuffle(List):随机打乱集合的顺序;

copy(List):将一个列表中的元素复制到另一个列表中;

fill(List<T>, T):用一个常量值填充容器;

reverse(List):逆置列表中的元素。

disjoint(Collection, Collection):判断两个集合有没有共同的元素。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics