Java基础--集合

Java基础 -- 集合

1. 什么是集合?

概括来讲,集合实际上就是一个容器,用来存放一组数据,根据存放不同的要求来划分成不同的类型,如:set集合要求存放的数据无序不可重复,list集合要求存放的数据有序可重复,map集合要求存放的数据是键值对,

2. 为什么要引入集合?

在引入集合之前,Java用数组存放数据,但是用数组存放存在几个问题:

  • 数组无法保存具有映射关系的数据(map集合解决了这个问题)
  • 数组一旦被定义,长度就是确定的
  • 数组类型确定不可变

引入集合解决了以上问题,但是集合的不足是:集合只能存放对象,不能存放基本类型的值;数组可以存放对象或者基本类型的值

3. 常见集合

3.1 list集合

  1. list集合存放有序,可重复的数据

  2. list接口常见实现类:ArrayList,LinkedList, Vector

*常见问题:ArrayList和LinkedList的区别?

【注】可以从链表和数组这两种数据结构的不同点思考


  • 底层数据结构来看,ArrayList底层使用Object数组,LinkedList底层使用的是双向链表
  • 线程安全来看,二者都不同步,不保证线程安全
  • 随机访问方面:ArrayList支持随机访问,LinkedList不支持随机访问
  • 插入删除方面:ArrayList插入删除元素的时间复杂度受到元素位置的影响,LinkedList头尾插入或删除元素不受元素位置影响,指定位置插入删除要求先移动到指定位置然后操作
  • 内存空间占用方面:LinkedList每个节点需要存放指针,会占用空间;ArrayList结尾会预留一定的容量空间

【注】一般使用ArrayList较多

*常见问题:ArrayList和Vector区别?

  • 底层数据结构:二者都是基于Object[]数组实现的
  • 线程安全方面:ArrayList线程不安全;Vector线程安全

【注】Vector比较古老,缺点比较多,尽量少用

3.2 Set集合

  1. Set集合存放无序,不可重复的数据

*常见问题:怎么理解无序和不可重复?

  • 无序指的是数据在底层数组中存储并非按照索引存储,而是根据hashCode()哈希算法)决定存储位置
  • 不可重复指的是添加元素先按照**equals()**判断两个对象是否相等,如果返回false,说明无重复元素,可以添加;否则不能

*常见问题:比较HashSet,LinkedHashSet,TreeSet三者异同

  • 相同点:

    • 三者都是Set接口的实现类
    • 三者都能保证元素唯一
    • 线程不安全
  • 不同点:

    • 底层数据结构不同:HashSet底层是哈希表;LinkedHashSet底层是哈希表+链表;TreeSet底层是**红黑树**。
    • 应用场景不同:HashSet用于不需要保证元素插入取出顺序的场景;LinkedHashSet用于保证插入取出顺序满足FIFO的场景;TreeSet用于支持元素自定义排序规则的场景

3.3 Map集合

  1. Map存放键值对(key-value)

*常见问题:HashMap和Hashtable的区别

  • 线程安全方面:HashMap非线程安全,Hashtable线程安全;原因是Hashtable内部方法用synchronized修饰
  • 效率:HashMap>Hashtable(Hashtable基本上被淘汰了)
  • 空值:HashMap支持key或value为null;Hashtable不允许出现null
  • 容量:HashMap默认初始容量为16,每次扩容,容量会变成两倍;Hashtable默认初始容量为11,每次扩容,容量会变成原来的2n+1
  • 解决哈希冲突机制:HashMap有解决哈希冲突的机制,Hashtable则没有

*常见问题:HashMap和HashSet的区别

  • 联系:HashSet底层基于HashMap实现
  • 区别
    • 实现接口
    • 存储元素类型
    • 添加元素方法
    • 计算hashcode

*常见问题:HashMap和TreeMap的区别

  • 相同点:都继承自AbstractMap
  • 不同点:
    • 实现接口:TreeMap实现了NavigableMap和SortedMap接口
    • 能力:TreeMap能对集合内元素进行搜索(实现NavigableMap接口);SortedMap能对集合中元素根据key排序(实现SortedMap接口)
posted @ 2022-06-10 21:03  Claire_2099  阅读(21)  评论(0编辑  收藏  举报