——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
2015.10.8
2016.3.11
目录:
1.集合
2.列表
3.队列
4.映射表
5.集
6.遗留的集合实现
7.总结
1.集合
集合(Collection)是Java数据结构中的列表(List)、集(Set)、队列(Queue)等的超级接口。其中定义了公共的API。
除了特殊实现外,集合与数组的区别在于集合是无界的,可以保存任意多个元素。
(1)常见的方法:
添加元素
pubiic boolean add(E e)//添加单个元素
public boolean addAll(Collection c)//添加整个Collection对象中的元素这两个方法的返回值表明当前调用者由于调用而发生更改,那么返回true。
示例:
// 新建一个Collection Collection c = new ArrayList(); //添加单个元素 boolean flag1 = c.add("Java"); boolean flag2 = c.add("Android"); //新建一个Collection Collection c2 = new ArrayList(); //添加一整个Collecion对象的元素 boolean flag3 = c2.addAll(c); //打印三次的添加结果 System.out.println(flag1);//true System.out.println(flag2);//true System.out.println(flag3);//true
查询Collection
public boolean contains(E e)//查询单个元素
public boolean containsAll(Collection c)//查询整个Collecion
public int size()//返回当前Collecion包含的元素示例:
Collection c = new ArrayList(); Collection c2 = new ArrayList(); c.add("Java"); c.add("Android"); c2.addAll(c); // 使用contain方法查询元素是否存在 boolean flag1 = c.contains("Java"); // 使用containAll方法查询整个Collecion boolean flag2 = c2.containsAll(c); // 使用size方法查询集合的元素个数 int size=c.size(); // 打印结果 System.out.println(flag1);// true System.out.println(flag2);// true System.out.println(size);// 3
删除元素
public void clear()//清除所有元素
public boolean remove(Object obj)//从此collection中移除指定元素
public boolean removeAll(Collection c)//移除整个c对象中包含的元素示例:
Collection c1 = new ArrayList(); Collection c2 = new ArrayList(); c1.add("Java"); c1.add("Android"); c2.addAll(c1); // 清除c中的所有元素 c1.clear(); // 使用isEmpty方法判断c中是否为空 boolean flag1 = c1.isEmpty(); System.out.println(flag1); String target = "Java"; // 清除c2中的"Java"元素 c2.remove(target); // 使用contain方法查询元素是否被删除 boolean flag2 = c2.contains(target);// true // 使用removeAll方法将清除c2与c1同时包含的元素 c2.removeAll(c1);//由于c1为空,所以当前步骤将不删除任何元素
遍历Collecion
Collecion实现了Iterable接口,意味者它可以用迭代器迭代。迭代器是一种设计模式,Collecion中有数量巨大的实现类,每一个实现类的数据结构和实现细节都可能不同,但是迭代器没有依赖这些,这正是他的强大之处。
下面的方法将返回当前Collecion的迭代器:
public Iterator iterator()示例:
Collection c = new ArrayList(); c.add("Java"); c.add("and"); c.add("Android"); // 获取c的迭代器 Iterator iterator = c.iterator(); while (iterator.hasNext()) { // 获取每一个元素 String element = (String) iterator.next(); // 下面的条件语句将删除"and"元素 if (element.equals("and")) iterator.remove(); // 打印元素到控制台 System.out.println(element); }
使用迭代器时要注意:
- Java迭代器与位置紧密相连,只有调用了next方法才能查找某个元素。
- 可以认为Java迭代器位于两个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素。
- 同理,只有调用了next方法才能使用remove方法。
迭代器进行迭代的时候,只能使用迭代器对Collecion进行修改,比如对Collecion元素的删除,如果迭代器发现它的集合被另一迭代器或者集合自身的方法修改了,就会抛出并发修改异常。例如下面的示例将是错误的:
while (iterator.hasNext()) { // 获取每一个元素 String element = (String) iterator.next(); //此处使用c对象进行修改,将出现异常。迭代器依赖于集合存在,当集合元素被修改而迭代器不知道时将出现未知状况,所以迭代器检测到异常的修改后将抛出异常 //c.remove("and");Error,ConcurrentModificationException }
集合与数组的相互转换
Collecion与数组的转换非常有用,可以把Collecion转化成一个数组,此时将大大增强数据的随机访问性能;同样使用数组初始化Collecion将可以使用很多集