• 第十五章----容器和集合


    容器(Collection)
    数组是一种容器, 集合也是一种容器
    java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器

    (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组, 数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制:

    定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内存, 随便往里添加)

    Collection---接口:
    Set接口
    *HashSet---实现类(以哈希码表为底层的实现机制)
    TreeSet---实现类(以二叉树(一种数据结构)为底层的实现机制)
    没有顺序, 不可以重复(可以互相equals就叫重复)
    List接口
    *ArrayList---实现类(以数组为底层的实现机制)
    LinkedList---实现类(以链表为底层的实现机制)
    有顺序, 可以重复

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

    Collection接口的方法
    Collection接口的使用
    代码实例: eclipse--com.test3
    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(有一个返回值要注意 !)
    add
    remove(int)
    remove(Object)
    indexOf
    lastIndexOf

    Map接口
    HashMap(哈希表做索引), TreeMap(二叉树做索引)
    键值对(键不能重复, 什么叫重复)
    put(为什么有个返回值啊亲 ?)
    get
    remove(为什么也有个返回值啊亲 ?)
    containsKey
    containsValue
    size
    isEmpty
    putAll
    clear
    练习:使用String[] args在命令行上检测输入的字符串数组各自出现的次数

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

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

    Set接口
    没有顺序, 但是不可以重复

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

    自动打包/解包(自动拆箱/装箱)
    实例: com.maya.test5
    自动将基础类型转换为对象(装箱)
    自动将对想转换为基础数据类型(拆箱)

    泛型(Generic)(1.5之后才有泛型)
    1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
    2, 集合中秋出来的时候需要转型, 效率低, 易出错

    好处: 增强程序的可读性和稳定性

    总结:
    集合是数组的一种延伸, 与数组相比有很多好处和优点,
    1, 可以存放不同的类型
    2, 长度可变
    3, 随时存放和获取

    六个接口和一个类:
    List
    Map
    Set
    Iterator
    Collection
    Comparable

    Collections类

    选择一种集合类型是一件非常痛苦的事
    在以后的编程中要考虑读取和修改的效率问题, 数据的存取在以后的使用过程中, Collection是主要的载体,
    Array: 读快改慢
    Linked: 读慢改快
    Hash: 介于两者之间的

  • 相关阅读:
    [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
    [BZOJ1271][WC2008]秦腾与教学评估(巧妙的二分)
    [BZOJ2879][Noi2012]美食节(最小费用最大流动态加边)
    [BZOJ1070][SCOI2007]修车(最小费用最大流)
    [BZOJ1211][HNOI2004]树的计数(Prufer序列)
    [BZOJ1406][AHOI2007]密码箱(数论)
    1、体验
    sublime 安装插件
    <a>标签中的href="javascript:;"就是去掉a标签的默认行为
    html 中的media属性
  • 原文地址:https://www.cnblogs.com/yuanlaihenkuang/p/6896710.html
Copyright © 2020-2023  润新知