博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java集合类
阅读量:6391 次
发布时间:2019-06-23

本文共 4623 字,大约阅读时间需要 15 分钟。

 

此类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。

  有一个特点是,上述所有的集合类都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。

  还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作量大大降低。

 

一、Collection接口

1、集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充

2、集合的特点:

性能高

容易扩展和修改

3、Collection的常用子类

List

Set

Queue

 

<-------查看java API:由->   本次所介绍集合类在java.util包下------>

 

二、List接口

1、List接口可以存放任意的数据,而且在List接口中内容是可以重复的

2、List接口常用子类:

ArrayList

Vector

3、常用操作:

判断集合是否为空:boolean isEmpty()

查找指定的对象是否存在:int indexOf(Object o)

代码示例:

package edu.tongji.list;import java.util.List;import java.util.ArrayList;public class ListDemo1 {	public static void main(String[] args) {		List
lists=null; lists=new ArrayList
(); //使用ArrayList子类接口为例 lists.add("A"); lists.add("B"); lists.add("A"); //元素可以重复 for(int i=0;i

运行结果:

ABA删除之后---BA集合是否为空:falseB是否存在:0B是否存在:-1

那么使用Vector有何区别呢?

 

 

三、Set接口

1、Set接口中不能加入重复元素,但是可以排序

2、Set接口常用子类

散列存放:HashSet

有序存放:TreeSet

package edu.tongji.list;import java.util.TreeSet;import java.util.Set;import java.util.HashSet;public class SetDemo01 {	public static void main(String[] args) {		Set
s=null; s=new TreeSet
(); s.add("B"); s.add("A"); s.add("C"); s.add("E"); s.add("D"); s.add("F"); System.out.println(s); Set
s1=null; s1=new HashSet
(); s1.add("B"); s1.add("A"); s1.add("C"); s1.add("E"); s1.add("D"); s1.add("F"); System.out.println(s1); } }

 

四、Iterator接口

1、集合输出的标准操作:

标准做法,使用Iterator接口

2、操作原理:

Iterator是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出

 

方法摘要:

boolean () 
          如果仍有元素可以迭代,则返回 true
() 
          返回迭代的下一个元素。
void () 
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

代码示例:

package edu.tongji.list;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorDemo01 {	public static void main(String[] args) {		List
lists=new ArrayList
(); lists.add("A"); lists.add("B"); lists.add("C"); lists.add("D"); lists.add("E"); Iterator
iter=lists.iterator(); while(iter.hasNext()){ String str=iter.next(); if("A".equals(str)){ iter.remove(); }else System.out.println(str); } }}

执行结果:

BCDE

注意点:在迭代输出的同时,不能对集合元素进行删除

package edu.tongji.list;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorDemo01 {	public static void main(String[] args) {		List
lists=new ArrayList
(); lists.add("A"); lists.add("B"); lists.add("C"); lists.add("D"); lists.add("E"); Iterator
iter=lists.iterator(); while(iter.hasNext()){ //lists.remove(2); System.out.println(iter.next()); } }}

否则会报错:

Exception in thread "main" java.util.ConcurrentModificationException	at java.util.ArrayList$Itr.checkForComodification(Unknown Source)	at java.util.ArrayList$Itr.next(Unknown Source)	at edu.tongji.list.IteratorDemo01.main(IteratorDemo01.java:19)

 

五、Map接口

1、保存形式:key—>value的方式保存

例如:小雪:13266668888

2、常用子类:

HashMap:无序存放,key不允许重复

Hashtable:无序存放,key不允许重复

代码示例:

package edu.tongji.list;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapDemo01 {	public static void main(String[] args) {		Map
map = new HashMap
(); map.put("key1", "www"); map.put("key2", "hello"); map.put("key3", "world"); map.put("key4", "com"); map.put("key5", "cn"); String str=map.get("key1"); System.out.println(str); if(map.containsKey("key1")){ System.out.println("key存在"); }else { System.out.println("key不存在"); } if(map.containsValue("hello")){ System.out.println("value存在"); }else { System.out.println("value不存在"); } Set
s=map.keySet(); Iterator
i=s.iterator(); while(i.hasNext()){ System.out.println(i.next()); } Collection
c=map.values(); Iterator
iter=c.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } }}

执行结果:

wwwkey存在value存在key1key2key5key3key4wwwhellocnworldcom

  

附几篇相关文章:

  

  

  

  

转载于:https://www.cnblogs.com/carsonzhu/p/5489446.html

你可能感兴趣的文章
ORACLE触发器的管理与实际应用【weber出品】
查看>>
C# SQLite
查看>>
JNI_1
查看>>
C#Arcengine通过坐标点生成面(环形)
查看>>
来朗沃后的学习感受
查看>>
Uva 10328 逆向思维
查看>>
(转载)表服务器无法打开与报表服务器数据库的连接。所有请求和处理都要求与数据库建立连接。...
查看>>
团队成员贡献总结
查看>>
MAC下调试JSON接口的工具(HTTP抓包工具)
查看>>
Android设置Gridview中的内容不滚动,然后控件中的内容随便添加的效果。
查看>>
数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
查看>>
(实用)Linux下安装JDK和Eclipse
查看>>
16 包
查看>>
[转]map hash_map unordered_map 性能测试
查看>>
如果点击项目生成时,报错如:不能编辑或者访问拒绝。
查看>>
Selenium学习(一)---Selenium IDE安装及简单介绍
查看>>
PHP控制反转(IOC)和依赖注入(DI)
查看>>
学习计划
查看>>
获取鼠标和元素的坐标点
查看>>
PXE 部署不同版本的系统安装环境以及挽救环境
查看>>