java集合框架---接口关系总结

集合两大接口: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   
                 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.实现接口实现类用LinkedList     
                 1.3.2.LinkedList可以作为List集合、双端队列、栈来使用  
  2.Map:来源于Java.util包,Map没有继承Collection接口,Map提供key到value的映射
          2.1.一个Map中不能包含相同的key,每个key只能映射一个value。
          2.2.Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射
          2.3.实现Map接口的常用类有Hashtable (是同步的),HashMap(非同步的),WeakHashMap
                2.3.1.WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

总结: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]
                 }   
            
           下一步会逐个介绍,集合接口中的那些实现类(用法,区别等)              

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/89281132