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集合框架常见面试题

 

转载于:https://www.cnblogs.com/xiaosisong/p/10880344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值