Java学习笔记(十五)

可以调用 forEachRemaining 方法并提供一 lambda表达式(它会处理一个元素)。 将对迭代器的每一个元素调用这个 lambda 表达式,直到再没有元素为止。
iterator.forEachRemaining(element -> do something with element);

如果想要删除指定位置上的元素, 仍然需要越过这个元素。(先调用next(),再调用remove)
如果调用 remove 之前没有调用 next 将是不合法的。如果这样做, 将会抛出一个 IllegalStateException 异常。

可以用以下方法在集合中插人元素:
boolean add(E element)
不过,由于映射包含键 / 值对,所以要用 put 方法来插人:
V put(K key, V value)
要从集合读取元素, 可以用迭代器访问元素。不过,从映射中读取值则要使用 get 方法:
V get(K key)

由数组支持的有序集合可以快速地随机访问,因此适合使用 List 方法并提供一个整数索引来访问。与之不同, 链表尽管也是有序的, 但是随机访问很慢,所以最好使用迭代器来遍历。

Set 接口等同于 Collection 接口,不过其方法的行为有更严谨的定义。集(set) 的 add方法不允许增加重复的元素。要适当地定义集的 equals 方法:只要两个集包含同样的元素就认为是相等的,而不要求这些元素有同样的顺序。hashCode 方法的定义要保证包含相同元素的两个集会得到相同的散列码。

在 Java 程序设计语言中,所有链表实际上都是双向链接的

LinkedList.add 方法将对象添加到链表的尾部。但是,常常需要将元素添加到链表的中间。由于迭代器是描述集合中位置的, 所以这种依赖于位置的 add 方法将由迭代器负责。只有对自然有序的集合使用迭代器添加元素才有实际意义。Listlterator.add()方法早迭代器位置之前添加一个新对象

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

为什么要优先使用链表呢? 使用链表的唯一理由是尽可能地减少在列表中间插人或删除元素所付出的代价。如果列表只有少数几个元素, 就完全可以使用 ArrayList。

建议避免使用以整数索引表示链表中位置的所有方法。

通常, 将桶数设置为预计元素个数的 75% ~ 150%。如果散列表太满, 就需要再散列 (rehashed)

PS:散列集和树集代码

猜你喜欢

转载自blog.csdn.net/qq_38022739/article/details/89182867
今日推荐