集合两大接口:Collection(集合的根接口),Map(映射集合的根接口)

1.Collection:来源于Java.util包,Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子  
                       接口”如List和Set。
          1.1.List :有序集合,包含重复的元素的Collection
                 1.1.1.可以使用索引(类似数组中的下标),访问List指定位置的元素
                                list.get(i)//获得List集合中的元素
                 1.1.2.允许集合中有相同的元素和null元素
                 1.1.3.实现List接口的常用类有LinkedList,ArrayList(常用),Vector(Stack是Vector的子类)   
                 1.1.4.查找元素效率高
          1.2.Set:无序集合,不包含重复的元素的Collection
                 1.2.1.最多有一个null元素 
                 1.2.2.传入的Collection参数不能包含重复的元素,如果添加已存在元素,会覆盖
                 1.2.3.实现类主要有HashSet和TreeSet 
                 1.2.4.删除,插入元素效率高      
          1.3.Queue:用于模拟队列这种数据结构,先进先出
                  1.3.1.在处理之前保存元素的集合(List,Set属于同级别);
                  1.3.2.除了具有Collection接口基本的操作能力之外还提供了额外的插入,移除,检查操作
                  1.3.3.每个Queue方法都有两种形式:
                     (1)如果操作失败则抛出异常(插入:add(e),移除:remove(),检查:element())
                     (2)如果操作失败,则返回特殊值[null或false,具体取决于操作](插入:offer(e),移除:poll(),检查:peek())
                  1.3.4.队列的头部都是通过调用remove或poll移除的元素(无论使用什么排序)     
                  1.3.5.队列通常以以FIFO(先进先出)方式对元素进行排序
                  1.3.6.在FIFO队列中,所有新元素都插入队列的尾部
                  1.3.7.常用实现类有LinkedList,PriorityQueue
                  使用队列Queue时注意两点:
                 (1)队列的实现通常不允许插入null值,尽管LinkedList允许插入null值,但是实践中尽量避免!!
                 (2)队列的实现通常不需要重写该类的equasl和hashCode方法,代替使用Object类默认的定义,因为在队列里面一样的元
                         素可能拥有不同的排序属性,每个Queue实现都必须指定其排序属性
          1.4.Deque:Deque是Queue的子接口
                     1.3.1.是双端队列,双端队列是元素的线性集合,支持在两个端点处插入和移除,检索元素
                     1.3.2.Deque接口是一种比Stack和Vector更为丰富的抽象数据形式,因为它同时实现了以上两者
                     1.3.3.实现接口实现类用ArrayDeque(总体ArrayDeque要比LinkedList更优越)      
  2.Map:来源于Java.util包,Map没有继承Collection接口,是java定义的一种键值对映射的数据结构接口
          2.1.一个Map中不能包含相同的key,每个key只能映射一个value
          2.2.key不要求有序,不允许重复;value同样不要求有序,但可以重复
          2.3.Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射
          2.4.实现Map接口的常用类有Hashtable (是同步的),HashMap(非同步的),WeakHashMap,LinkedHashMap,TreeMap
                2.3.1.WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
          2.5.Map提供key到value的映射

总结:Set和List的区别(3点)

1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
     2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
     3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。  
扩展:迭代器 (简单说就是为了计数用的!!!)
      1.遍历集合方法(3种)
            1.1.一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架
            1.2.采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。
      2.迭代器(Iterator),使你能够通过循环来得到或删除集合的元素。
      3.ListIterator 继承了Iterator,以允许双向遍历列表和修改元素      
      4.ListIterator 与Iterator区别:
          4.1.不同点
               4.1.1.Iterator比较通用,List,Set,Map均可以使用,ListIterator 只能用于List集合中
               4.1.2.ListIterator有add()方法,可以向List中添加对象,而Iterator不能
               4.1.3.ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历,Iterator就不可以
               4.1.4.ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现,Iterator没有此功能
               4.1.5.ListIterator是Iterator 的子接口,添加了一些方法
               4.1.6.ListIterator可以实现对象的修改,set()方法可以实现,Iierator仅能遍历,不能修改。
           4.2.相同点
               4.2.1.都可实现删除对象 
               4.2.2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历
                     4.2.2.1.hasNext():集合中有元素就返回true
                     4.2.2.2.next():集合中的下一个元素
           4.3.总结:
              4.3.1.ListIterator是一个比 Iterator更加强大的迭代工具      
              4.3.2.ListIterator唯一不足就是只能用于List集合
              4.3.3.在单线程的遍历过程中,如果要进行 remove 操作,可以调用迭代器的 remove 方法而不是集合类的 remove 方法
       5.常用代码示例:
            5.1.向集合中添加元素,使用ListIterator的add() 方法
                  ArrayList<String> list = new ArrayList<>();
                             list.add("aaa");
                             list.add("bbb");
                             list.add("ccc");
                          System.out.println(list);//获取元素集合[aaa,bbb,ccc]
                          System.out.println(list.get(0));//获取下标为0的元素[aaa]
                           //Iterator 接口(没有add()方法)
                          //Iterator<String> it = list.iterator();
                            ListIterator<String> it = list.listIterator();  
                                   while(it.hasNext()){
	                              String s = it.next();
	                              //向指定元素后面添加(如果不指定,将在每个元素后面都加"1")
	                              if(s.equals("aaa")){
	                             	it.add("1");
	                     }
                 }
                        System.out.println(list);//[aaa,1,bbb,ccc]
                 }   
                 
           5.2.删除集合中的元素(ListIterator和Iterator均可)    
                           //Iterator 接口(没有add()方法)
                          //Iterator<String> it = list.iterator();
                            ListIterator<String> it = list.listIterator();  
                                   while(it.hasNext()){
	                              String s = it.next();
	                              //删除集合元素aaa
	                              if("aaa".equals(s)){
	                             	it.remove();
	                     }
                 }
                        System.out.println(list);//输出移除后的元素集合[bbb,ccc]
                 }   
          5.3.重新设置集合中的元素,使用ListIterator的set() 方法
                          //Iterator 接口(没有set()方法)
                          //Iterator<String> it = list.iterator();
                            ListIterator<String> it = list.listIterator();  
                                   while(it.hasNext()){
	                              String s = it.next();
	                              //将集合元素aaa设置为AAA
	                              if("aaa".equals(s)){
	                             	it.set("AAA");
	                     }
                 }
                        System.out.println(list);//输出重置后的元素集合[AAA,bbb,ccc]
                 }   
            
           下一步会逐个介绍,集合接口中的那些实现类(用法,区别等)