zoukankan      html  css  js  c++  java
  • JAVA 集合<修改中,未完成>

    JAVA容器关系图

    一.Collection---接口:( ! 为常用内容, * 为必须掌握的内容, ? 了解, 能说出底层实现原理)
     1. Set接口
       *HashSet---实现类(以哈希码表为底层的实现机制)
       ?TreeSet---实现类(以二叉树(一种数据结构)为底层的实现机制)
        在Set接口中没有提供除了Collection接口额外的方法

       Colletion a=new HashSet();

       没有顺序, 不可以重复(可以互相equals就叫重复),无索引

       无序输出

     2. !List接口
       *ArrayList---实现类(以数组为底层的实现机制)
       ?LinkedList---实现类(以链表为底层的实现机制)

        Collection a=new ArrayList();

         有顺序, 可以重复,有索引

         输出按照索引顺序

     3. !Map接口(键值对)
       *HashMap---实现
       ?TreeMap---实现类
       每次往里放的时候都是一对一对的(键值对)

       Collection a=new HashMap();

       键值对存放,无序输出,

     二. Collection接口的方法
       Collection接口的使用

       泛型集合
       Collection<String> c = new ArrayList<String>();
       问题: 为什么不直接写ArrayList<String> a = new ArrayList<String>();
       c.add(参数类型必须是Object)--> 父类的引用指向子类的对象
       
       c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, 自定义的类, 需要自己重写父类的equals方法
       重写equals方法, 也应该重写hashCode方法
       
       hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址, 所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等

     三.*List接口:
      ArrayList(API中说初始容量为10的, 注意这个问题), LinkedList
      有顺序, 可以重复添加
      !get(索引值)
      !set(索引值)
      !remove(int)
      !remove(Object)---判断equals
      !indexOf(Object) 返回这个对象首次出现在这个集合中的位置, 如果没有的话, 返回-1
      !lastIndexOf 返回这个对象最后一次出现在这个集合中的位置, 如果没有的话, 返回-1
      !clear 清空这个集合

     四.*Map接口:
      !HashMap(哈希表做索引), ?TreeMap(二叉树做索引)
      键值对(键不能重复, 什么叫重复(可以互相equals就叫重复))
      !put(为什么有个返回值啊亲 ?)
      !get
      !remove(key)
      !remove(key, value) 当键值对是相对应的时候, 返回值是true
      !containsKey(key)
      !containsValue
      *keySet--返回值--Set
      ?values--返回值--Collection
      !size
      !isEmpty
      ?putAll(Collection)
      ?clear
      练习:使用String[] args在命令行上检测输入的字符串数组各自出现的次数

    五. !Iterator接口:
      Iterator为了统一江湖, 从此出现了
      所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象
      Iterator对象称作迭代器, 用来方便的实现对容器内的元素的遍历
      Iterator里面的三个方法:
       hasNext()
       next(), 重点注意: 这个方法每调用一次, 游标就往下走一个
       remove(), 尽量不要与父类的方法混着用
      for循环遍历, 1.5以后才出现的for(Objetc o : array) {}
       有优点有缺点

      思考一个问题: 任何继承了Iterator接口的都要实现它的方法, ArrayList等实现类也实现了这个接口, 为什么API没有这个方法

    六. ?Comparable接口, Collections类
       List的常用算法:
       sort(List); 排序
        如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
       shuffle(List); 随机排列
       void reverse(List); 逆序排列(LinkedList效率较高)
       copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
       fill(List, Object);使用某个对象填充整个List
       binarySearch();

  • 相关阅读:
    【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)
    【洛谷2245】 星际导航 (最小瓶颈路)
    【UVA10816】Travel in Desert (最小瓶颈路+最短路)
    【洛谷 5002】专心OI
    炸金花【大模拟】
    【BZOJ1055】[HAOI2008]玩具取名(区间DP)
    【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)
    NOIP前的模板
    获取<考试>博文密码!o(*≧▽≦)ツ
    这是个萌新的萌新博客
  • 原文地址:https://www.cnblogs.com/zhangxin4477/p/7485904.html
Copyright © 2011-2022 走看看