迭代器

深入学习java8集合(一):ArrayList的实现原理

匿名 (未验证) 提交于 2019-12-02 21:53:52
  ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。      每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。      注意,此实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问: List list = Collections.synchronizedList( new

java---容器

匿名 (未验证) 提交于 2019-12-02 21:40:30
容器类 collection接口 常用方法: void clear() 移除此 collection 中的所有元素(可选操作)。 boolean contains(Object o ) 判断是否包含。 boolean isEmpty()判断是否为空。 boolean remove(Object o) 移除指定数据元素。 boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 boolean retainAll(Collection<?> c) 求交集,保存两个容器都有的数据。 int size() 返回此 collection 中的元素数。 Object[] toArray()转换为数组。 遍历方法: 增强for|for…each 迭代器 //迭代器 /* * 1.获取迭代某一个容器的迭代器对象 * 2.判断是否存在下一个可迭代的元素 hasNext() ->true,false * 3.返回下一个元素 next() ->下一个元素 */ Iterator<String> it=coll.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 泛型: 泛型是程序设计语言的一种特性

快速失败/报错机制 - fail-fast

孤街醉人 提交于 2019-12-02 19:44:37
迭代器模式 提供一种方法顺序的访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 一、类图 迭代器模式主要包含以下角色。 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。 二、示例 /** * 抽象的聚集。(可以理解为Java中的Collection接口) */ interface Aggregate { //返回迭代器 Iterator iterator(); } /** * 具体的聚集(可以理解为Java中的Collection的实现类) */ class ConcreteAggregate implements Aggregate { private Object[] list = {"zhangsan", "lisi", "wangwu", "zhaoliu"}; public Object getElement(int index) { if (index < list

Python 3标准库第三章

泄露秘密 提交于 2019-12-02 19:05:55
时间过得很快,又是一周过去了,今天感觉迷迷糊糊的,不在状态,然后,下面开始我们的讲解,还是跟大家分享一下我自己的一些想法, 第一、怎么讲了,就是各位如果有怀才不遇的想法,我感觉最好不要有这种想法; 第二、需要竞争对手; 第三、坚持; 第四、苏格拉底的徒弟,柏拉图; 第五、讲课本身,锻炼了我的表达能力; 第六、毅力; 第七、边讲解边学习; 第八、坚持; 第九、 functools lambda函数。 3.1 functools:管理函数的工具 ---------------------------- 3.1.1 修饰符 ------------ 3.1.1.3 其他 callable ----------------------- 3.1.1.4 方法和函数 ----------------------- 3.1.1.5 获取修饰符的函数属性 ----------------------- 3.1.2 比较 ----------------------- 3.1.3 缓存 ---------------------- lru_cache()修饰符将一个函数包装在一个“最近最少使用的”缓存中。 ---------------------- 3.1.4 缩减数据集 ---------------------- reduce()函数取一个callable和一个数据序列作为输入

STL源码剖析——算法#1 内存处理基本工具

落爺英雄遲暮 提交于 2019-12-02 18:41:39
  我们在学习序列式容器时,我们经常会遇到这三个函数:uninitialized_copy、uninitialized_fill、uninitialized_fill_n。在那时我们只是仅仅知道这些函数的功能,至于它们是如何实现的,我们并没有深究。在这节,我们花点时间摘下这几个函数的面具,看看它们不为人知的那一面。 uninitialized_copy   函数签名: 1 template <class InputIterator, class ForwardIterator> 2 inline ForwardIterator 3 uninitialized_copy(InputIterator first, InputIterator last, 4 ForwardIterator result)   该函数一般用于在内存配置与对象构造分离的情况,例如vector,vector一般配置比所需元素个数更大的空间,那么在备用空间中放入新元素,就是uninitialized_copy该做的事。换句话说,如果作为输出目的地的 [ result, result+(last-first) ) 范围内的每一个迭代器都指向未初始化的区域,则uninitialized_copy() 会使用复制构造函数,把来自 [ first, last ) 范围的每一个对象产生一份复制品,放进输出范围中

java(集合框架)(转)

僤鯓⒐⒋嵵緔 提交于 2019-12-02 18:17:28
前言 集合①只能存放对象,存放基本类型会自动转成对应的对象②可以存放不同类型的对象(如果不使用泛型的话),且不限数量③集合中存放的只是对象的引用 集合详解 集合-1.png 集合-2.png Iterable接口(java.lang包) Collection继承了该接口,所以Collection的实现类都可以使用 Iterator() 方法来获得迭代器,从而遍历集合 public interface Iterable<E> { Iterator<E> iterator();//return a Iterator Object } Iterator接口(迭代器,java.util包) 迭代器可以使用for-each代替。迭代器相当于一个在两个元素之间的指针(首尾元素除外),使用 remove() 删除元素之前,需要先调用 next() 越过该元素。如果调用 next() 之后,集合发生了改变,再接着调用 remove() 则会抛出异常。 public interface Iterator<E>{ E next();//返回迭代器刚越过的元素的引用 boolean hasNext();//判断容器内是否还有可供访问的元素 void remove();//删除迭代器刚越过的元素,所以要删除则必须先越过 } ListIterator接口

集合学习

 ̄綄美尐妖づ 提交于 2019-12-02 17:08:22
集合集成体系图 集合学习 数组和集合的区别 1. 长度区别: 数组的长度是固定的而集合的长度是可变的 2. 存储数据类型的区别: 数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型 3. 内容区别: 数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素 集合框架(Collection集合的功能概述) Collection的功能概述(通过API查看即可得到) 添加功能 boolean add(Object obj):添加一个元素 boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素) 删除功能 void clear():移除所有元素 boolean remove(Object o):移除一个元素 boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 如果没有交集元素 则删除失败 返回false 判断功能 boolean contains(Object o):判断集合中是否包含指定的元素 boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true) 比如:1,2,3

迭代器

余生长醉 提交于 2019-12-02 16:44:34
#迭代器? 有iter方法和next方法 # l = [1,2,3,4,5] # i = iter(l) #<list_iterator object at 0x000001F0156DE088> 生成迭代器 # print(i) # print(next(i)) #1 # print(next(i)) #2 # print(next(i)) #3 # print(next(i)) #4 # print(next(i)) #5 # lo = [1, 2, 3, 4, 5, 6] # for y in lo: # ci = iter(lo) #列表转换成迭代器 # print(next(ci)) #还不能用 it = iter([1, 2, 3, 4, 5]) # 循环: while True: try: # 获得下一个值: x = next(it) print(x) except StopIteration: # 遇到StopIteration就退出循环 break 来源: https://www.cnblogs.com/TKOPython/p/11755470.html

C++中的迭代器---进行操作字符串的基本用法

。_饼干妹妹 提交于 2019-12-02 15:35:56
以下的用法中包括:复制、小写变大写、append追加、进行翻转字符串、进行擦除和替换的用法 以下引入一个比较重要的库: #include <algorithm> 1、复制用法: #include <iostream> #include <stdio.h> #include <string> #include <algorithm> using namespace std; int main() { string s("are you beautiful"); cout << "original:" << s << endl; string sd(s.begin(), s.end());//从最初到最后开始进行复制 cout << "sd=" << sd << endl; while (1); return 0; } 2、将字符串中的小写变成大写的用法 #include <iostream> #include <stdio.h> #include <string> #include <algorithm> using namespace std; int main() { string s("are you beautiful"); cout << "original:" << s << endl; transform(s.begin(), s.end(), s.begin(),

集合、泛型、Map

白昼怎懂夜的黑 提交于 2019-12-02 15:32:38
集合与数组 集合与数组的区别? 1.集合的长度是可变的,而数组一旦确定长度将无法改变 2.集合只能存储引用类型,而数组可以存储引用类型,也可以存储基本类型 3.集合内的元素可以是不同类型的元素,但是数组只能是同类元素 Collection集合的的功能 常用的方法有: add()添加一个元素 addAll(Collection x)添加一个元素(该元素是一个集合) clear()移除所有元素 remove()移除一个指定元素 contains()判断该集合包含指定元素 containsAll( Collection x) 判断该集合是否包含指定集合 还可以通过例如Iterator< E> iterator()等进行获取该类型元素的集合 size()用来判断集合的长度 isEmpty() 判断集合是否为空 retainAll(Collection c) 可以获取两个集合的公有元素 Object[] toArray() 可以将集合转换成数组 ,然后可用通过遍历该数组从而遍历该集合 也可以使用迭代器迭代 List集合 其可以使元素有序存储,并给每一个元素一个索引。期内的元素可以重复出现 常用的方法有: add(int x ,X x)在指定索引添加指定的元素 remove()删除指定索引的元素 get() 返回指定索引的元素 set( )将指定索引出的元素 替换成另一个元素 List集合