zoukankan      html  css  js  c++  java
  • 2017/12/28 集合和多线程

    1、---|Collection: 单列集合
    ---|List: 有存储顺序, 可重复
    ---|ArrayList: 数组实现, 查找快, 增删慢
    由于是数组实现, 在增和删的时候会牵扯到数组
    增容, 以及拷贝元素. 所以慢。数组是可以直接
    按索引查找, 所以查找时较快
    ---|LinkedList: 链表实现, 增删快, 查找慢
    由于链表实现, 增加时只要让前一个元素记住自
    己就可以, 删除时让前一个元素记住后一个元
    素, 后一个元素记住前一个元素. 这样的增删效
    率较高但查询时需要一个一个的遍历, 所以效率较低

    ---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低
    和ArrayList实现方式相同, 但考虑了线程安全问
    题, 所以效率略低
    ---| Set接口 无序,不可以重复的集合
    ---|HashSet 线程不安全,存取速度快。底层是以hash表实现的。

    ---|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。
    如果在比较的时候两个对象返回值为0,那么元素重复。
    2、 ---| Map 接口 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    ---| HashMap 采用哈希表实现,所以无序

    ---| TreeMap 可以对健进行排序

    ---|Hashtable:底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。效率较低,被HashMap 替代。

    ---|HashMap:底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。要保证键的唯一性,需要覆盖hashCode方法,
    和equals方法。

    ---|LinkedHashMap:该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。

    ---|TreeMap:底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。
    return 0,来判断键的唯一性。

    3、如果调用remove之前没有调用next是不合法的,会抛出IllegalStateException;

    4、注意同时重写equals方法和hashcode方法,要想使用toString方法直接显示集合,要注意重写;

    5、----| Comparable
    compareTo(Object o) 元素自身具备比较性
    ----| Comparator
    compare( Object o1, Object o2 ) 给容器传入比较器

    TreeSet集合排序的两种方式:一,让元素自身具备比较性。也就是元素需要实现Comparable接口,覆盖compareTo 方法。这种方式也作为元素的自然排序
    ,也可称为默认排序。
    二,让容器自身具备比较性,自定义比较器。需求:当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。
    那么这时只能让容器自身具备。
    定义一个类实现Comparator 接口,覆盖compare方法。并将该接口的子类对象作为参数传递给TreeSet集合的构造函数。
    当Comparable比较方式,及Comparator比较方式同时存在,以Comparator比较方式为主。
    6、遍历Map的方式:
    将map 集合中所有的键取出存入set集合。
    Set<K> keySet() 返回所有的key对象的Set集合
    再通过get方法获取键对应的值。
    values() ,获取所有的值.
    Collection<V> values()不能获取到key对象

    Map.Entry对象 推荐使用 重点 Set<Map.Entry<k,v>> entrySet()将map 集合中的键值映射关系打包成一个对象Map.
    Entry对象通过Map.Entry 对象的getKey,getValue获取其键和值。
    7、一个任务一个进程,一个进程可以有多个线程;
    8、同步是一种机制,防止访问同一个资源时,造成死锁或结果不正确;可以创建同步方法,也可以用同步代码块;
    9、多线程的实现方式:一、继承Thread类,重写run(),使用时调用start();
    二、实现Runable接口,重写run();使用时把他的实现类的引用传给Thread的构造方法作为参数;

  • 相关阅读:
    WPF多语言支持
    解决 OpenCV with CUDA 编译提示缺少 nvcuvid.h 的问题
    ios adi ADBannerView 无法修改 宽度
    ios 判断横竖屏的方法
    Core data 数据同步
    常用的sql脚本(陆续更新)
    高晓松:不买房,买梦想
    (转贴)关于多线程执行显示进度条的实例!
    如何快速创建大文件
    利用Adobe Acrobat 7.0 Professional 自带的导出图片的功能(转)
  • 原文地址:https://www.cnblogs.com/loong996/p/8135015.html
Copyright © 2011-2022 走看看