接口

8.2.2迭代器接口
迭代器(intertor)可以采用统一的方式对collection集合中的元素进行遍历操作无需关心collection集合中的内容,也不必实现IEnumerable或IEnumexator接口就能够使用foreach循环遍历集合中的部分或全部元素。
功能:
方法
default voidforEach Remaining (ConSumer<?super E>action)
boolean hosNext()判断是否有下一个元素,有则返回true否则false
Enext 返回可访问的下一个元素
8.3.1 Collection接口
collection接口是setqueue 和list的父接口
Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。因为 List 接口和 Set 接口继承自 Collection 接口,所以也可以调用这些方法。
方法名称说明boolean add(E e)向集合中添加一个元素,E 是元素的数据类型boolean addAll(Collection c)向集合中添加集合 c 中的所有元素void clear()删除集合中的所有元素boolean contains(Object o)判断集合中是否存在指定元素boolean containsAll(Collection c)判断集合中是否包含集合 c 中的所有元素boolean isEmpty()判断集合是否为空Iteratoriterator()返回一个 Iterator 对象,用于遍历集合中的元素boolean remove(Object o)从集合中删除一个指定元素boolean removeAll(Collection c)从集合中删除所有在集合 c 中出现的元素boolean retainAll(Collection c)仅仅保留集合中所有在集合 c 中出现的元素int size()返回集合中元素的个数Object[] toArray()返回包含此集合中所有元素的数组
8.3.2list接口
List接口是继承自Collection,Collection是最最基本的接口集合,他的特点是能够维护元素的次序,并且允许元素的重复。但是Java SDK并不直接提供继承Collection的类,而是提供一些继承Collection的接口,常见的继承和实现Collection接口的接口和类有:Collection下继承Collection接口的接口有List和Set,今天先分析List接口。List接口是定义一个允许重复项的有序集合,与set的区别在于List都是线性存放的。下面有三个常用实现类,ArrayList,LinkedList,Vector。首先来温习ArrayList:ArrayList:是一种会扩充的Array,Array是一个长度确定的数组,Arraylist则是不用实现知道数组长度。比如:在游戏中每隔一段时间生成一队小兵对象,这个数量是未知的且会变化的。它的特点就是能动态增容。但是在内存中的实现依旧是以数组的方式实现的,当数组内存不够时则会自动扩充一小段内存。优点:具有直接根据索引下标进行数据查找的功能,直接根据引用和索引确定在内存中的位置直接读取,索引时间复杂度为常数;缺点:具有数组的通病,当增加或删除一个数据时,最多可能移动数组长个数据,时间复杂度为N;另若是当添加元素大于初始容器容量时,需要进行扩充,将旧数据复制到新的大数组中,具体实现为,调用了ensureCapacity(size+1)方法,之后将元素的索引赋给elementData[size],而后size自增。一般每次扩充为原来的1.5倍。ArrayList不是线程安全的,因此不适合存在于多线程中,但是在我以往的经验中也用过,需要对这个实例出的对象使用synchronized也可以考虑使用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,但是我还没有用过。ArrayList的代码实现的功能包括:set(int index, E element)、add(E e)、add(int index, E element)、addAll(Collection<? extends E> c)、addAll(int index, Collection<? extends E> c)这些添加元素的方法,还有如remove(int index),remove(E element)removeRange(int Fromindex,int toindex )delete()的删除元素方法。还有如get(int index)等获取方法。LinkedList:上面描述的Arraylist是根据数组Array实现的,而LinkedList就是根据链表实现的,它包括了链表的优点,增减迅速,占内存分散。LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。由于LinkedList还提供了头节点和尾节点,这些操作允许将链接列表用作堆栈、队列或双端队列 (deque)。一般都会将ArrayList和LinkedList作比较,他们的区别最主要也就是数组和链表的区别,需要根据背景来使用,比如一个随机寻找的功能,显然ArrayList更适合,若是一个大批量数据插入问题,则LinkedList更适合。vector:和ArrayList在实现方式,优缺点很相似,但是它是同步的,也就是说适合于多线程中,每次只能有一个线程对其进行操作,但是实现同步需要很高的花费,因此在访问方面略慢于ArrayList。vector的自我扩充一般是原默认值的两倍。
是collection的子接口可以使用collection中的全部方法。
list.iferator()返回迭代器
8.3.3set接口及其实现类
set集合类似一个罐子可以将多个元素第一进罐子中但不能记住元素的添加顺序因此只能包含相同的元素set接口继承collection接口没有提供任何额外的方法。
set
1、hashset:set典型实现类 具有良好的存取以及查找性
2、treeset:树的数据结构来存集合元素可保证集合元素处于排序状态自然排序,定制排序
3、enumset:枚举类设计的集合类必须指定枚举类型enumset集合中的元素也是有存的按照枚举顺序进行顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值