zoukankan      html  css  js  c++  java
  • 集合类概述

    常用集合的继承关系如下图所示:

    其中我们常用的就是Collection接口中的Ste接口和List接口。其中最常用的就是ArrayList和LinkedList。

    注意:Map、Collection以及其中的Ste和List都是接口,都是不可以被实例化的!

    1.Map(映射)

    Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

    a.Map集合中的键对象不允许重复,也就说,任意两个键对象通过equals()方法比较的结果都是false.,但是可以将任意多个键独享映射到同一个值对象上。 

    b.Map接口中又分Hasmap和Treemap,他们都是Map接口下的具象class是可以被实例化的

    HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。

    TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。 

    Map的常用方法:

    package com.inba.maya.JiHe;
    
    import java.util.*;
    
    
    public class Test {
    
        //Map接口的常用用法! 在Map接口中没有实现Iterator迭代器!
        public static void main1(String[] args) {
            Map<String,String> map=new HashMap<String,String>();
            //添加数据
            map.put("张三", "张三的歌");
            map.put("李四", "李四的歌");
            map.put("王五", "王五的歌");
            map.put("赵六", "赵六的歌");
            map.put("周七", "周七的歌");
            
            //获得key是张三的values值;
            String s=map.get("张三");
            System.out.println(s);
            
            //获得map中所有的key对象组成的Set集合
            Object obj=map.keySet();
            System.out.println(obj);
            
            //获得map中所有的值对象组成的Collection集合
            System.out.println(map.values());
            
            //获得map的集合大小
            System.out.println(map.size());
            
            //是否有key是张三的键,是就返回true,不是就返回false
            System.out.println(map.containsKey("张三"));
            
            //是否有key是王五的歌的值,是就返回true,不是就返回false
            System.out.println(map.containsValue("王五的歌"));
            
            //移除键是王五的键
            map.remove("王五");
            System.out.println(map.keySet()+"*****"+map.values());
            
            //移除所有
            map.clear();
            System.out.println(map.size());
        }
    
    }

    打印出来对应的效果:

    二:

    List接口中社和于自身的方法都与索引有关。因此可以通过对象的索引来操作对象。

    List:次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推 荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元 素。 

    List接口下分:

    ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历 ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。 

    LinkedList :对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

    List接口的常用方法:

    package com.inba.maya.JiHe;
    
    import java.util.*;
    
    
    public class Test {
        //Collection接口下List接口的常用方法!
        public static void main(String[] args){
            List<String> list=new ArrayList<String>();//ArryList
            //添加数据add(obj);
            list.add("吕布");
            list.add("典韦");
            list.add("赵云");
            list.add("关羽");
            list.add("马超");
            list.add("张飞");
            //获得list的集合大小
            System.out.println(list.size());
            
            //用来获得一个包中的所有对象,
            Iterator<String> it=list.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
            
            //获得序列号是0.1.2的对象
            System.out.println(list.get(0)+"**"+list.get(1)+"**"+list.get(2));
            
            //指定添加的位置
            list.add(1, "我添加的放在了下标为1的位置");
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
            
            //移除指定位置的对象
            list.remove(0);
            System.out.println(list.get(0));
            
            //替换指定位置的对象
            list.set(0, "替换了");
            System.out.println(list.get(0));
            
            //
            Iterator<String> it2=list.iterator();
            while(it2.hasNext()){
                System.out.println(it2.next());
            }
            
        }
    
    }

    效果图:

    三:迭代器

    Iterator接口位于java.util包下,Iterator接口中有单个方法。

    hsaNext():如果仍有元素可以迭代那么返回true,反之返回false。常用于是for循环中的判断条件

    next:返回迭代的下一个元素。

    remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)

    除了Iterator可以实现遍历之外,还有一个更强大的ListIterator,它可以实现逆序遍历列表中的元素,示例如下:

    package com.inba.maya.JiHe;
    
    import java.util.*;
    
    
    public class Test {
    
        public static void main(String[] args){
            List<String> list=new ArrayList<String>();//ArryList
            //添加数据add(obj);
            list.add("吕布");
            list.add("典韦");
            list.add("赵云");
            list.add("关羽");
            list.add("马超");
            list.add("张飞");
         //正序排列
            Iterator<String> it2=list.iterator();
            while(it2.hasNext()){
                System.out.println(it2.next());
            }
            //倒序排列
            ListIterator<String> it3=list.listIterator();
            while(it3.hasNext()){
                it3.next();
            }
            
            while(it3.hasPrevious()){
                System.out.println(it3.previous());
            }
            
        }
    
    }

    效果图:

    总结:

    Collection
     --List:将以特定次序存储元素。
               --ArrayList / LinkedList / Vector
     --Set : 不能含有重复的元素,自行排序
               --HashSet / TreeSet
    Map
     --HashMap
     --HashTable
     --TreeMap

    追加:

    取得两个List的交集,retainAll()方法

    import Java.util.ArrayList;
    import java.util.List;
    public class strSplit {
      public static void main(String args[])
      {
       List<String> list1 = new ArrayList<String>();
       List<String> list2 = new ArrayList<String>();
       list1.add("g");
       list1.add("s");
       list1.add("a");
       list1.add("f");
       list2.add("g");
       list2.add("c");
       list2.add("b");
       list2.add("a");
       list1.retainAll(list2);
       System.out.print(list1);
     
      }
    }

    程序输出结果为:

    [g, a]

    Java中Set巧用,去掉重复数据

    Java中Set有这样一个方法,.addAll( Collection c),直接加入List集合,去掉重复的数据。

    Java代码  收藏代码
    1. public static void main(String[] args) {  
    2. Set  set=new HashSet();  
    3. set.add("abc");  
    4. set.add("cde");  
    5. set.add("efg");  
    6. set.add("fgh");      
    7. set.add("abc"); //重复的abc,set会自动将其去掉     
    8. System.out.println("size="+ set.size() );  
    9.   
    10. List list = new ArrayList();  
    11. list.add("abc");  
    12. list.add("aaa");  
    13. list.add("fff");  
    14. set.addAll(list); //将list中的值加入set,并去掉重复的abc  
    15. System.out.println("size="+ set.size() );  
    16.   
    17. for( Iterator   it = set.iterator();  it.hasNext(); )  
    18. {               
    19.     System.out.println("value="+it.next().toString());              
    20. }   
    21. }  
  • 相关阅读:
    Spring中这么重要的AnnotationAwareAspectJAutoProxyCreator类是干嘛的?
    Spring到底应该学哪些内容?
    如何评价《Java 并发编程艺术》这本书?
    在腾讯工作是一种怎样的体验?
    图解 HTTP 连接管理
    42 张图带你撸完 MySQL 优化
    我是如何进入腾讯的?
    《计算机网络 PDF》搞起!
    JSR
    RelationNet:学习目标间关系来增强特征以及去除NMS | CVPR 2018
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6241478.html
Copyright © 2011-2022 走看看