自我总结集合篇

1.数组和集合的区别:

        数组一经初始化之后长度就不可变(final修饰),集合可变;

        数组只能存放同一种元素,集合可存多种不同元素;

        数组中只能存放有序的元素,可以添加重复元素。集合可以无序,不可以出现无序的元素。

2.Collection下有什么常用的子类集合,说说底层原理   ((1条消息) Java集合类总结,详细且易懂!_WgRui的博客-CSDN博客)详解底层

首先collection是单列集合:

add(E e)添加元素;  clear()清空元素;  remove(E e)移除元素;  size()元素数量;

toArray()集合转数组;  contains(E e)判断元素是否存在;  isEmpty()判断集合是否为空;

 

有list和set

list:有索引、元素有序、可以重复\链表结构没有索引

Arraylist:底层是数组,线程不安全,查询快增删慢,高效

Linklist:底层是双向链表,线程不安全,查询慢(头尾除外),增删快,高效

Vector:底层是数组,线程安全,低效

set:元素不可重复、无索引、查询快

hashset:是Set的主要实现类,线程不安全,底层是hashMap。初始容量和加载因子都和hashMap一样、元素无序

treeSet:是SortedSet接口的实现类,可以按照对象的指定属性进行排序、元素有序

LinkedHashSet:是hashset的继承实现类,是按照添加元素的顺序进行遍历,因为底层维护了一张链表用来记录添加的顺序、元素有序

3.说一下map接口中的常用子类。以及底层实现原理

map是双列集合,存值方式是键值对

put(key , value) 添加元素; remove(key) 删除key对应元素;

containsKey(key) 判断是否存在key对应元素;get(key) 获取key对应元素;

KeySet() 获取所有的key,存到Set集合中;entrySet() 获取所有的元素,存到Set集合中;

ps:Map集合必须保证保证key唯一,作为key,必须重写hashCode方法和equals方法,以保证key唯一。

四个实现类:

hashmap:JDK1.8之前:哈希表(数组+单向链表);JDK1.8之后:哈希表(数组+单向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。

特点:查询快、无序、key可以为null、是线程不安全的

linkedhashmap:和hashmap一样的底层、查询快、有序、key可以为null、是线程不安全的

hashtable:哈希表、 查询快、无序、key不可为null、是线程安全的

treemap:红黑树、查询快、有序、key不能为null

4..ArrayList 1.7版本和1.8版本底层扩容的实现原理

1.7时直接创建长度为10的数组、第11个增加才扩容1.5倍(饿汉式)

1.8时add时才创建数组(懒汉式)

5.ArrayList 和 Vector 的区别

1. Vector与ArrayList一样,也是通过数组实现的,Vector类的所有方法都是同步的。它也是线程安全的,而Arraylist是线程异步(ASynchronized)的,是不安全的。如果不考虑到线程的安全因素,一般用Arraylist效率比较高。
2. 使用ArrayList时,如果不指定大小,会生成一个空的数组;使用Vector时,如果不指定大小,会默认生成一个10个元素大小的数组
3. 扩容方面。Vector默认在大小为0的时候就会扩容,第一次扩容容量是2倍,如果还达不到要求,则直接扩容到指定容量

6.ArrayList和LinkedList 的区别和联系、Set不能存放重复元素,其底层是如何实现的、HashMap中put方法的过程?

7.HashMap和HashTable有什么区别?

- ①、`HashMap`是线程不安全的,`HashTable`是线程安全的;
- ②、由于线程安全,所以`HashTable`的效率比不上`HashMap`;
- ③、`HashMap`最多只允许一条记录的键为`null`,允许多条记录的值为`null`,而`HashTable`不允许;
- ④、`HashMap`默认初始化数组的大小为16,`HashTable`为11,前者扩容时,扩大两倍,后者扩大两倍+1;
- ⑤、`HashMap`需要重新计算hash值,而`HashTable`直接使用对象的`hashCode`;

8.你知道hash的实现吗?为什么要这样实现?

`JDK1.8`中,是通过`hashCode()`的高16位异或低16位实现的:`(h=k.hashCode())^(h>>>16)`,主要是从速度,功效和质量来考虑的,减少系统的开销,也不会造成因为高位没有参与下标的计算,从而引起的碰撞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值