Collection是Java中提供的一种数据容器,是用来存储数据的。java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。
Collection接口是所有集合的根接口。
1. Collection接口的基本方法
元素个数:int size()
学习Java中三种长度表现形式
- 数组.length 属性 返回值 int
- 字符串.length() 方法,返回值int
-
判空: boolean isEmpty()
添加:
尾部追加:boolean add(E e)
添加一个collection:boolean addAll(Collection c)
删除:
清空:void clear()
- 删除:boolean remove(Object o) 删除第一个匹配成功的element
- boolean removeAll(Collection
c) 查找:boolean contains(Object o) 判断对象是否存在于集合中,对象存在返回true.
Iterator实现类对象:Iterator
iterator(); 转换成数组:Object[] toArray()
流:Stream
stream() 2. Iterator 迭代器
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,
如果有,就把这个元素取出来,继续判断。如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。Iterator接口有两个抽象方法:
- 调用集合的方法iterator()方法,得到Iterator接口的实现类的对象;
- 在while循环条件上调用iterator.hasNext()判断集合中是否有元素;
- 在while循环内调用方法iterator.next()取出集合中的元素。
```java
Collection
coll = new ArrayList (); coll.add(“abc1”); coll.add(“abc2”); coll.add(“abc3”); coll.add(“abc4”); //调用集合的方法iterator()获取出,Iterator接口的实现类的对象 Iterator it = coll.iterator();
//接口实现类对象,调用方法hasNext()判断集合中是否有元素 while(it.hasNext()){ 调用方法next()取出集合中的元素 String s = it.next(); System.out.println(s); }
<a name="t71hd"></a>### foreach -- iteration的引申Collection 继承Iterable接口,Iterable接口允许对象成为foreach的语句的目标。```javafor( 数据类型 变量名: 数组或者集合 ){sop(变量);}
注意:
在对Collection类进行迭代时,要调用删除元素时必须调用Iterator的remove()方法,而不能调用Collection的remove()方法。
错误写法实例一:
public static void remove(ArrayList<String> list) { for (int i = 0; i < list.size(); i++) { String s = list.get(i); if (s.equals("b")) { list.remove(s); } } }• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11错误的原因:这种最普通的循环写法执行后会发现第二个“b”的字符串没有删掉。遍历第一个字符串b时因为符合删除条件,所以将该元素从数组中删除,并且将后一个元素移动(也就是第二个字符串b)至当前位置,导致下一次循环遍历时后一个字符串b并没有遍历到,所以无法删除。针对这种情况可以倒序删除的方式来避免,因为数组倒序遍历时即使发生元素删除也不影响后序元素遍历。
错误写法实例二:
public static void remove(ArrayList<String> list) { for (String s : list) { if (s.equals("b")) { list.remove(s); } } }错误的原因:这种for-each写法会报出著名的并发修改异常:
java.util.ConcurrentModificationException。- 在对Collection类进行迭代时,要调用删除元素时必须调用Iterator的remove()方法,而不能调用Collection的remove()方法。
