Java学习笔记(34)----------Iterator、Collection接口以及foreach

来源:互联网 发布:淘宝衣服吊牌剪了退货 编辑:程序博客网 时间:2024/06/04 19:56

Iterator、Collection接口:

 

如下图:Iterator、Collection同在一个包中:

红字部分使我们经常遇到的,但是遇到又不知道怎么去理解,去应用它!

 Collection是最基本集合接口,它定义了一组允许重复的对象。Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下:

 

2、 Set接口

       Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复。

       特征:无序且不可重复。

 

3、  List接口

        List接口同样也继承于Collection接口,但是与Set接口恰恰相反,List接口的集合类中的元素是对象有序且可重复。

       特征:有序且可重复。

       两个重要的实现类:ArrayList和LinkedList

       1.ArrayList特点是有序可重复的

       2.LinkedList是一个双向链表结构的。

 

4、Map接口

       Map也是接口,但没有继承Collection接口。该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。

 

5.Iterator接口

       Iterator接口,在C#里有例外一种说法IEnumerator,他们都是集合访问器,用于循环访问集合中的对象。
      所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。Iterator对象称作迭代器,
Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

 

 

 

下面将是展现真正的实力了!

 

 

CollectionTest.java代码


 

[java] view plaincopy
  1. package com.haixu.collection;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collection;  
  5. import java.util.HashSet;  
  6. /** 
  7.  * Collection集合内部方法的学习! 
  8.  * */  
  9. public class CollectionTest {  
  10.    
  11.  public static void main(String[] args) {  
  12.     
  13.  Collection<String> c =new ArrayList<String>();  
  14.  //向集合内添加元素  
  15.  c.add("Hi!");  
  16.  c.add("Haixu");  
  17.  //输出各个元素  
  18.  System.out.println("c的集合元素个数:"+c.size());  
  19.    
  20. //虽然集合里不能放基本类型的值,但Java支持自动装箱!  
  21.    
  22.  //删除指定的元素  
  23.  c.remove(2);  
  24.  System.out.println("c的集合元素个数:"+c.size());  
  25.    
  26.  //判断集合c中是否包含字符串"Haixu"  
  27.  System.out.println("c的集合中是否有\"Haixu\"字符串:" + c.contains("Haixu"));  
  28.    
  29.  //继续向集合内添加元素并将集合元素输出出来  
  30.  c.add("You are very perfect!");  
  31.  System.out.println("c的集合中的元素为:" + c);  
  32.    
  33.  //用HsahSet定义对象c1  
  34.  Collection<String> c1 = new HashSet<String>();  
  35.      
  36.  //添加元素  
  37.  c1.add("Believe yourself!");  
  38.  c1.add("Haixu!");  
  39.  c1.add("you will success!");  
  40.  System.out.println(c1);  
  41.    
  42.  //判断c集合是否完全包含c1集合  
  43.  System.out.println("c集合是否完全包含c1集合?" + c.contains(c1));  
  44.   
  45.    
  46.  c.removeAll(c1);  
  47.  System.out.println("c的集合元素为:" + c);  
  48.    
  49.  //清空集合c  
  50.  c.clear();  
  51.  System.out.println("c的集合元素为:" + c);  
  52.    
  53.  c1.retainAll(c);  
  54.  System.out.println("c1的集合元素为:" + c1);  
  55.  }  
  56.   
  57. }  


 

 

IteratorTest.java

 

[java] view plaincopy
  1. package com.haixu.collection;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashSet;  
  5. import java.util.Iterator;  
  6. /* 
  7.  * Iterator 用于遍历集合 
  8.  * */  
  9. public class IteratorTest {  
  10.   
  11.  public static void main(String[] args) {  
  12.     
  13.   Collection<String> str1 = new HashSet<String>();  
  14.   //添加元素  
  15.   str1.add("Everything that you can do!");  
  16.   str1.add("if only you hard work continuely!");  
  17.   str1.add("Success will belong to you!");  
  18.     
  19.   //获取str1集合对应的迭代器  
  20.   Iterator<String> it = str1.iterator();  
  21.   while(it.hasNext()){  
  22.      
  23.    String str = (String)it.next();  
  24.    System.out.println(str);  
  25.      
  26.    if(str.equals("Everything that you can do!"));  
  27.    it.remove();  
  28.      
  29.    str = "Everything that you can do!";  
  30.      
  31.    System.out.println(str);  
  32.   }  
  33.   System.out.println(str1);  
  34.     
  35.  }  
  36.    
  37. }  



 

foreach循环来迭代访问Collection集合里的元素跟家简洁一点!

foreach循环迭代方位集合元素是,该集合不可改变否则将会引发ConcurrentModificationException异常!

 

ForeEachTest.java

 

[java] view plaincopy
  1. package com.haixu.collection;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashSet;  
  5. /* 
  6.  * foreeach 循环来迭代Collection集合里的元素 
  7.  * */  
  8. public class ForeEachTest {  
  9.       
  10.     public static void main(String[] args) {  
  11.         Collection<String> str1 = new HashSet<String>();  
  12.         //添加元素  
  13.         str1.add("Everything that you can do!");  
  14.         str1.add("if only you hard work continuely!");  
  15.         str1.add("Success will belong to you!");  
  16.           
  17.         for(Object obj : str1){  
  18.             String str = (String) obj;  
  19.             System.out.println(str);  
  20.               
  21.             if(str.equals("Everything that you can do!")){  
  22.                 //下面的代码会引发异常   
  23.                 //是故意的!  
  24.                 str1.remove(str);  
  25.                   
  26.             }  
  27.         }  
  28.         System.out.println(str1);  
  29.     }  
  30.   
  31. }  


 

以上就是各个接口的应用和使用情况。

因为其中有一个返回值为Iterator<E>类型的iterator()方法,所以,Collection接口必须实现Iterator接口

实现Collection接口的每一个类都要实现以上众多方法,但开发者自己实现很麻烦。所以java提供了AbstractCollection类来编写具体的类。

以下类都实现了Collection接口:

AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedDeque,ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList,LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector

 

0 0
原创粉丝点击