集合的概述,Collection集合及其功能,集合中迭代器的原理

       集合的由来:
                 目前的学习的语言是一种面向对象语言,面向对象语言对事物的描述通过对象(属性,行为..)体现的,必须给对象进行操作,
           并且还要针对多个对象进行操作,(使用容器类型的变量):目前学习过的容器:1)数组  2)StringBuffer
               1)数组:长度固定,不能满足长度变化的要求
               2)StringBuffer:字符串缓冲区,在内存中始终返回的是String类型,也满足一些需求所以Java提供了一种技术:集合。

       集合和数组的区别:
                      1)长度的区别:
                                数组长度是固定的.          
                                集合长度是可变的!
                      2)存储数据类型的区别:
                                数组既可以存储基本数据类型,也可以存储引用数据类型
                                集合只能存储引用数据类型
                      3)存储元素的区别:
                                数组存储同一种类型的元素       举例: 水杯中的水
                                集合可以存储多个类型的元素

          Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。 一些 collection 允许有重 复 的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。

Collection集合中的功能:

                 添加功能:
                         boolean add(Object obj):添加一个元素
                         boolean addAll(Collection c):添加一个集合的元素  (给一个集合添加进另一个集合中的所有元素)
                 删除功能:
                         void clear():移除所有元素
                         boolean remove(Object o):移除一个元素
                        boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合交      
                                                                            交集元素如果没有交集元素 则删除失败 返回false
                  判断功能:
                         boolean contains(Object o):判断集合中是否包含指定的元素    

                         boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的 元
                                                                                 素才算包含才返回true)

                                                                                 比如:1,2,3 containsAll 12=true   1,2,3 containsAll 2,3,4=false
                         boolean isEmpty():判断集合是否为空
                   获取功能:
                         Iterator<E> iterator()(重点)
                   长度功能:
                         int size():元素的个数
                   交集功能:
                          例如:A集合对B集合取交集,获取到的交集元素在A集合中。返回的布尔值表示的是A集合是否发生变化
                          boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)
                   把集合转换为数组:
                          Object[] toArray()

                   注:方法名后面带ALL的都是集合的高级功能;

Collection集合基本功能的举例:

public class CollectionDemo {
	
	public static void main(String[] args) {
		
		//不带all的功能属于Collection基本功能:
		//创建集合对象
//		Collection c = new Collection() ;   不能实例化的
		Collection c = new ArrayList() ; //利用List接口的子实现类来实例化
		System.out.println(c);//[]   集合没有元素:[]   内部中重写了Object的toString方法
		
//		boolean add(Object e):添加单个元素
//		System.out.println(c.add("hello"));
		/**
		 * ArrayList的add方法的源码
		 *   public boolean add(E e) {
			        ensureCapacityInternal(size + 1);  // Increments modCount!!
			        elementData[size++] = e;
        			return true;  //只要添加元素,就返回true
    }
		 */
		c.add("hello") ;
		c.add(100);
		c.add("world") ;
		c.add("java") ;
		System.out.println(c);
		//void clear();
//		c.clear(); 
		//remove(Object o)
		System.out.println(c.remove("java"));
		System.out.println(c);
		
		
		//boolean contains(Object o):一个集合中是否包含指定的元素
		System.out.println(c.contains("android")) ;
		
		//boolean isEmpty():判断集合是否为空. 空,就是true
		System.out.println(c.isEmpty());
		System.out.println(c.size());
	}
}

Collection集合高级功能的举例:

public class CollectionDemo2 {
	
	public static void main(String[] args) {
		
		//创建两个集合对象
		Collection c1  = new ArrayList();
		Collection c2  = new ArrayList();
		
		//分别给集合c1,c2中添加元素
		c1.add("abc1") ;
		c1.add("abc2") ;
		c1.add("abc3") ;
		c1.add("abc4") ;
		
//		c2.add("abc1") ;
//		c2.add("abc2") ;
//		c2.add("abc3") ;
		c2.add("abc4") ;
//		c2.add("abc5") ;
//		c2.add("abc6") ;
//		c2.add("abc7") ;
		
		System.out.println("c1:"+c1);
		System.out.println("c2:"+c2);
		System.out.println("-------------------------");
		//boolean addAll(Collection c):添加一个集合中的所有元素,添加到c1中
		//System.out.println("addAll():"+c1.addAll(c2));
		
		//	removeAll(Collection c):移除一个集合中的元素   
//		System.out.println("removeAll():"+c1.removeAll(c2));  //删除一个算是删除!,删除返回true
		//	boolean containsAll(Collection c):包含一个集合中的元素  
			
//		System.out.println("containsAll():"+c1.containsAll(c2)); //包含所有算是包含
		/**
		 * A集合对B集合取交集,交集的元素的去A集合里面了,返回的boolean表达的意思A集合中的                       
		 * 元素是否发生变化.如果没有变化,false 否则,true
		 */
		//boolean retainAll(Collection c) 
		System.out.println("retainAll():"+c1.retainAll(c2));
		
                System.out.println("c1:"+c1);
		System.out.println("c2:"+c2);
		
		
	}
}

Collection集合迭代器的作用和原理:

          迭代器作用:  对 collection集合进行迭代的迭代器迭代。

          集合的专有遍历方式:    (迭代器)
                     Iterator<E> iterator()

                     在Iterator中有
                                boolean hasNext()
                                Obect next()返回迭代的下一个元素。

迭代器的使用举例:

package westos.org.collection_demo2;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class CollectionTest2 {
	
	public static void main(String[] args) {
		
		//创建集合对象
		Collection  collection = new ArrayList() ;
		//给集合中添加几个字符串元素
		collection.add("hello") ;
		collection.add("java") ;
		collection.add("world") ;
		collection.add("hadoop") ;
		//专有迭代的遍历方式
		//获取迭代器
		Iterator iterator = collection.iterator() ; //实现方式:底层有一个内部类
		while(iterator.hasNext()) {//看有没有下一个元素
		System.out.println(iterator.next());//获取下一个元素
			
                //上述方式直接输出了,如果要获取字符串内容的同时,获取长度
			String str = (String)iterator.next() ;
			System.out.println(str+"---"+str.length());
		}
		
		
	}
}

迭代器的源码:

public interface Iterable{
	Iterator<T> iterator();
}
//接口
interface Iterator{
	boolean hasNext() ;
	Object next() ;
}

interface Collection{

}

interface List extends Collection{
	
}


class ArrayList implements List{
	  public Iterator<E> iterator() {
        return new Itr(); //匿名对象:Itr
   	  }
   	  
   	  
   	  //内部类:Itr
   	   private class Itr implements Iterator<E> {
   	   	//判断是否有下一个元素
   	   	   public boolean hasNext() {
            return cursor != size;
        	}
        	
        	//获取下一个迭代的元素
        	public E next() {
       		}
        	
   	   }
	
}

猜你喜欢

转载自blog.csdn.net/qq_41942241/article/details/81366337