谈谈Java中List、Set以及Map的区别
广义上一般情况下: List是列表,存入的元素是有序可重复的,常见的实现有LinkedList Set是集合,存入的元素是无序的,但是唯一的,常见的实现有HashSet和TreeSet Map是映射,存入的是键值对,键是唯一的,而值可以重复,常见的实现有HashMap和LinkedHashMap,Map的键和值都可以为null,同样为null的键是唯一的,但为null的值可以重复 List和Set都继承自Collection接口,而Map单独构成一个继承结构
ArrayList和LinkedList的区别
数组和链表的区别
ArrayList的数组结构实现。ArrayList的特点就是在逻辑上相邻的元素在物理上也相邻,分配的是一段连续的物理空间。ArrayList的修改和查询很快,可以通过下标索引直接定位,时间复杂度度为O(1);但是ArrayList的插入和删除效率一般,需要移动插入或删除位置之后的所有元素,时间复杂度接近O(n),插入的时候还需要考虑是否需要对数组扩容 LinkedList是双链表结构实现。LinkedList的特点是可以快速的插入和删除,因为在 通过下标访问元素时,基于双链表的设计,会先比较下标和LinkedList的大小,如果positon>size(),则从链表尾部开始遍历,否则就是从头部开始遍历。插入和删除操作只需要修改前后指针的指向,不需要像ArrayList一样判断是否需要扩容和复制新数组,提高了插入和删除的效率。
说一说ArrayList的扩容机制
详见Java集合体系
说一说HashMap的实现原理
HashMap的实现是 首先HashMap是Map接口的一个实现子类,存放的是键值对,键要求唯一,而值可以重复。而且键值都可以为为null。 HashMap的实现数据结构主要是数组+链表实现,主体是数组,链表是为了解决hash冲突而存在,如果一个数组过长且链表过长会进化成红黑树。 数组的实现通过计算hashcode来保证插入的键是唯一的不重复。 那HashMap是如何保证插入的键是唯一的呢? 当添加一个新的键值对的时候,首先会计算出键的hashcode,如果hashcode唯一那么就将添加到散列表中,如果
Android2023暑期实习---网易游戏一面面经_Liknananana的博客-CSDN博客2019-03-29:HashMap 的实现原理? · Issue #16 · Moosphan/Android-Daily-Interview【Android】实习面试总结重要知识点,拿出你的小本本_Rose J的博客-CSDN博客