zoukankan      html  css  js  c++  java
  • Java中Link,set 和Map的区别,ArrayList,HashSet和HashMap的区别。

    首先 List Set Map 分别继承了ArrayList HashSet HashMap ,

    list 允许重复,set不允许重复,map是键值对形式,key-value key不能重复。

    期次AryyList是线程不安全的,底层使用的是object数组,由于采用数组作为储存,那么插入和删除数据的时候就到位置的影响比较大,比如做add操作额时候,默认会将元素追加到数组的尾部,但是如果制定位置坐添加或者删除,那么坐后面的 数据就会向前或者向后自动移动 一位。虽然ArrayList 对于添加删除响应时间比较长,但是对于查询访问,可以通过序列快速定位。对于内存空间来说,ArrayList 会在list列表的尾部预留一定容量的空间。

    ArrayList 可以使用增强for循环来做遍历元素。线程不安全。

    private static final int DEFAULT_CAPACITY = 10;--初始值为10
    private static final Object[] EMPTY_ELEMENTDATA = {};--空额 object数组;
     private transient Object[] elementData;
     public ArrayList() {
            super();
            this.elementData = EMPTY_ELEMENTDATA;
        }

    接下来是HashSet ,HashSet的底层是基于HashMap实现的。set 是HashSet的接口类,放入到set中的数据 是不能重复的。那么为什么不能重复呢?放入HashSet的数据,会先计算hashCode值,来判断插入的位置,与此同时也会对已经存在set中的数据做hashCode对比,如果没有出现重复,则插入成功,如果发现值重复,那么会调用equals()方法来检查hashCode值相等的对象内容是否相等,如果相等,那么就不会让其插入 。

        private transient HashMap<E,Object> map;
        private static final Object PRESENT = new Object();
    public boolean add(E e) { return map.put(e, PRESENT)==null; } public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key);--hashCode值 int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }

     接下来是HashMap  底层是数组和链表的结构,通过key的hashCode值确定value放置的位置。默认初始容量是16,1<<<4(源码中就这么写的)1000 二进制。

    HashMap做添加操作的时候用的是put方法;

    相关连接:https://snailclimb.top/JavaGuide/#/./java/collection/Java集合框架常见面试题

  • 相关阅读:
    Python开发【第二十一篇】:Web框架之Django【基础】
    梳理
    Python Day15 jQuery
    day12 html基础
    Python day11 Mysql
    锻炼马甲线
    第一章:软件性能测试基本概念
    第4关—input()函数
    第3关—条件判断与嵌套
    第2关—数据类型与转换
  • 原文地址:https://www.cnblogs.com/xiaosisong/p/10880344.html
Copyright © 2011-2022 走看看