collection是最基本的集合接口,一个collection代表一组object,即collection的元素(elements)。一些collection允许相同的元素而另一些不行。一些能排序而另一些不行。java sdk不提供直接继承自collection的类,java sdk提供的类都是继承自collection的“子接口”如list和set,详细信息可见官方文档,下面我们来讨论继承它的接口list,set,这两个接口实现了主要的方法,但是还是有一些拓展的,不如list中的迭代就和collection中的有些不同,下面会详细介绍,这里我们用一个例子体会一下这里的接口的实现:
collection<integer> list=new linkedlist<>();
list
linkedlist
从文档中可以看到这个listedlist实现的不只是list接口,比如还是实现了deque接口,这个为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。这里的linkedlist都是用双向链表实现的,这个类不是同步的,因此在多个线程中有修改其中的元素操作时必须实现外部的线程同步
构造方法
linkedlist()
创建一个空的链表linkedlist(collection<? extends e> c)
构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列,构造如下:arraylist<integer> arraylist=new arraylist<>(); //这里新建一个线性列表 linkedlist<integer> linkedlist=new linkedlist<integer>(arraylist); //用线性列表新建一个链表 system.out.println(linkedlist.getfirst());
方法摘要
boolean add(e e)
将指定元素添加到此列表的结尾。成功插入返回truevoid add(int index, e element)
在此列表中指定的位置插入指定的元素。boolean addall(collection<? extends e> c)
添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。例子如下:arraylist arraylist=new arraylist();//新建一个线性表 arraylist.add(10); arraylist.add(100); arraylist.add(2); linkedlist linkedlist=new linkedlist(); linkedlist.add(100); linkedlist.add("chenjiabing"); linkedlist.addall(arraylist); //将线性表中所有的元素添加到链表中 for(object i:linkedlist) { system.out.println(i); }
boolean addall(int index, collection<? extends e> c)
将指定 collection 中的所有元素从指定位置开始插入此列表。addfirst
将指定的元素添加到开头addlast
将指定的元素添加到末尾clear()
从列表中移除全部的元素clone()
得到一个链表的副本,由于其返回的类型是object,因此需要进行强制转换成linkedlist类型linkedlist list=(linkedlist)linkedlist.clone();
contains(object o)
如果此列表中包含元素o返回trueelement()
获取但不移除此列表的头(第一个元素)。iterator()
返回列表中的元素的迭代器iterator iter=list.iterator(); //返回一个迭代器类型 while(iter.hasnext()) //判断迭代器中是否存在元素 { object o=iter.next(); if(o.equals(1)) { system.out.println(o); //输出迭代器中的元素 iter.remove(); //移除这个元素,这个是从列表中直接移除的 } }
listiterator iterator = list.listiterator(); while (iterator.hasnext()) //首先将迭代器一直运行到末尾 { object o = iterator.next(); if (o.equals(1)) { iterator.add(100); //将元素插入到当前元素的前面,这个在iterator是不存在的方法 } } while (iterator.hasprevious()) //这时的迭代器是从末尾开始的,因此这里相当与逆序输出 { system.out.println(iterator.previous()); }
get(int index) 返回此列表中指定位置处的元素。这里要注意的是虽然这种方式能够得到指定索引的值,但是这里对于链表中的操作开销是非常大的,因此这个方法不主张使用,如果需要遍历列表可以使用迭代器和for-each语句
linkedlist list=new linkedlist(); for(int i=0;i<10;i++) { list.add(i); } for(object o:list){ //使用for-each遍历列表 system.out.println(o); } iterator iter=list.iterator(); //返回一个迭代器类型 while(iter.hasnext()) //判断迭代器中是否存在元素 { system.out.println(iter.next()); //输出迭代器中的元素 }
arraylist
构造函数
方法摘要
vector
构造函数
方法摘要
同样是继承了list接口,因此大部分的方法都是一样的,比如add,addall,clear,clone,contains,remove,removeall
stack
stack 类表示后进先出(lifo)的对象堆栈。它通过五个操作对类 vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
注意:这里的stack虽然继承了了iterator接口但是如果使用了迭代的话它输出的还是原来你输入的顺序,这里就违背了栈的原理后进先出
构造方法
stack() 创建一个空堆栈。
方法摘要
以上所述是小编给大家介绍的java中的collection接口和其主要实现的类详解整合,希望对大家有所帮助
如对本文有疑问, 点击进行留言回复!!
集合框架——Map、泛型以及Collection算法常用方法
Elasticsearch 升级 7.x 版本后,我感觉掉坑里了
Mybatis的插件运行原理以及如何编写一个Mybatis的插件
网友评论