关于Java基础中集合部分知识点

本文深入解析Java集合框架,对比ArrayList与LinkedList、Vector,探讨HashMap、Hashtable及ConcurrentHashMap的异同,分析HashSet与TreeSet的特性,助你掌握Java集合的高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人目前阶段的所有作品,都是针对在面试的时候需要回答的问题的有些个人见解,肯定有很多地方会有错,请看到的朋友帮忙指出,谢谢~

集合有Collection接口和Map接口两大接口
Collection

  • List
    • ArrayList
    • LinkedList
    • Vector(过时)
  • Set
    • HsahSet
      • LinkedHashSet
    • TreeSet

Map

  • HashMap
    • List item
  • TreeMap
  • Hashtable(过时)

(1) ArrayList和LinkedList的区别
ArrayList底层实现是通过数组实现的,而LinkedList底层实现是通过双向链表实现的
区别:

  1. ArrayList 支持以角标位置进行索引出对应的元素,而LinkedList在进行查询的时候需要将整个链表遍历来获取相应的元素,所以在查询方面ArrayList会更快。
  2. ArrayList由于是数组实现的,在做删除和修改的时候,需要进行复制和移动数组,消耗会比较大,而LinkedList是双向链表实现的,只需要更改相应元素下的指针即可,消耗很小,所以一般来说LinkedList的增删速度要比ArrayList快。

(2) ArrayList和Vector的区别
二者都是通过数组来实现的,都可以按照位置索引号来获取相应的元素,存储的数据都是有序可重复的,也允许为null;
区别在于:

  1. ArrayList是非同步的,Vector是同步的,但是即便要使用同步时,我们也是通过Collections工具类来构建出同步的ArrayList,而不是用Vector。
  2. 在扩容时,ArrayList扩容1.5倍,且初始长度为10,而Vector扩容2倍。

(3) HsahMap和Hashtable的区别
二者都是实现Map接口,但是区别在于:

  1. HashMap是非同步的,而Hsahtable是同步的,但是当我们要使用同步的时候不使用Hashtable,而是使用ConcurentHashMap;
  2. Contains方法
    Hsahtable中有该方法,HashMap中移除了该方法,使用ContainsKey和ContainsValue来代替;
  3. HashMap中允许存在Null,而Hashtable不允许有Null;
  4. 继承的类不同
    HashMap继承自AbstractMap<K,V>
    Hashtable继承自Dictionary<K,V>

(4) HashMap和HashSet的区别
HashMap:
HashMap实现Map接口,用来存K-V键值对的,使用put方法存入,Map接口中的实现类TreeMap和HashMap都不允许存入重复的Key;
HashMap允许存入的Value为null;
HashMap是线程不安全的,要想变成安全的,需要调用Collections工具类中的静态方法synchronizeMap()来实现;
Map接口的TreeMap实现类中存储的对象可以按照一定的次序进行排列,而HashMap中对象的存储是无序的。
HashSet:
实现了Set接口,是用来存对象的,存入的对象不允许相同,通过重写HashCode和equals方法来比较对象的值是否相同,如果不重写以上方法,则在调用add()方法添加元素时,如果对象重复了,则返回false,没重复则返回true。

(5)TreeSet和HashSet的比较
HashSet存入的数据是无序的,而TreeSet是有序的,排序方式有两种,分别是自然排序和定制排序;
HashSet是不同步的,且可以存入null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值