• List和Map


    List是一个接口,继承自Collections接口

    一、List特点

    元素有序,可重复

    二、ArrayList,LinkedList与List的不同

    1、List是接口类,ArrayList和LinkedList是List的实现类。
    2、ArrayList是动态数组(顺序表)的数据结构。顺序表的存储地址是连续的,所以在查找比较快,但是在插入和删除时,由于需要把其它的元素顺序向后移动(或向前移动),所以比较耗时。
         Vector也是动态数组结构,但是是线程同步的
    3、LinkedList是链表的数据结构。链表的存储地址是不连续的,每个存储地址通过指针指向,在查找时需要进行通过指针遍历元素,所以在查找时比较慢。由于链表插入时不需移动其它元素,所以在插入和删除时比较快。

    三、List的基本方法

    List<String> list = new ArrayList<String>();
    list.add("java"); // 向集合追加元素
    list.add(2, "hadoop");    // 向集合插入元素
    System.out.println(list.get(2)); // 根据下标取出元素
    System.out.println(list.size()); // 集合中元素的个数
    list.remove(2);    // 根据下标删除某一个元素
    list.contains("java"); //true 看集合中是否包含某一个对象,使用equals比较
    list.contains(new String("ibm")); //true

    equals与==区别:
    1.==是比较对象的地址值,即判断是否是同一个对象
    2.equals可以重写,这里比较的是内容是否相同
    3.equals在Object中,比较的是是否为同一对象,与==相同

    四、hashmap工作原理

    一、基本概念

    HashMap储存的是键值对;
    HashMap可以接受null键值和值,而HashTable则不能;
    HashMap是非synchronized;

    二、工作原理

    HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。

    当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象

    HashMap是在bucket中储存键对象和值对象,作为Map.Entry

    三、当两个对象的hashcode相同会发生什么?

    因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用LinkedList存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在LinkedList中。

    四、如果两个键的hashcode相同,你如何获取值对象?

    找到bucket位置之后,会调用keys.equals()方法去找到LinkedList中正确的节点,最终找到要找的值对象

    五、为什么hashmap是非线程安全的?

    因为多线程会导致HashMap的Node链表形成环形数据结构,一旦形成环形数据结构,Node的next节点永远不为空,就会在获取Node时产生死循环

    保证线程安全:

    1、HashTable源码中是使用synchronized来保证线程安全的

    2、ConcurrentHashMap,在8中CHM摒弃了Segment(包含一个segment数组,将数据分段存储,给每一段数据配一把锁,也就是所谓的锁分段技术)的概念,而是启用了一种全新的方式实现,利用CAS算法

    3、SynchronizedMap也是使用synchronized来保证线程安全的

     六、Map的排序问题

    TreeMap默认升序,可以用Comparator的compare方法进行排序

    如果需要对值进行排序,需要Collections的sort的compare方法进行排序

    博客园:http://www.cnblogs.com/zhuziyu/
    Copyright ©2018 不是植物
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    excel导入数据库表
    C# WinForm通过WebClient实现文件上传下载
    C#中的多线程——线程同步基础
    document.body.scrollTop为0的处理办法
    C#利用短信猫收发短信息的方法
    XML Serializable Generic Dictionary
    Making IE use PNG Alpha transparency
    String[3]: the Size property has an invalid size of 0.
    input style兼容IE6的方案
    安装window service 中出现Set Service Login对话框
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/8548987.html
Copyright © 2020-2023  润新知