zoukankan      html  css  js  c++  java
  • 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 不是植物
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    1、Java语言概述与开发环境——Java程序运行机制
    1、Java语言概述与开发环境——JDK的安装与环境变量的配置
    针孔成像模型
    anconda下安装opencv
    用Navicat Prenium12连接Oracle数据库(oracle11g版本)时报错ORA-28547:connection to server failed,probable Oracle Net admin error.解决办法
    JQueryEsayUI的datagrid分页
    java中String和int的互相转化
    js页面刷新
    oracle的正则表达式
    EL表达式中,param和requestScope的区别
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/8548987.html
Copyright © 2011-2022 走看看