集合学习-----Set

本文介绍了ArrayList与Vector的区别,重点讨论了ArrayList的扩容机制。接着,文章详细讲解了Set集合的概念和特点,特别是HashSet的查重机制,以及LinkedHashSet和TreeSet的特性。还深入探讨了==、equals和hashCode的区别,并总结了Comparable和Comparator在排序中的作用。最后,对学习的几个集合做了总结,强调了它们在不同场景下的适用性。
摘要由CSDN通过智能技术生成

面试题:

 ArrayList与Vector的区别?为什么要用ArrayList取代Vector呢?

vector是线程同步的,可以由两个线程安全的访问一个vector对象,但是一个线程访问Vector的话代码在同步上操作耗费大量时间,而ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList.

ArrayList的扩容机制:

以无参构造方法创建ArrayList时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素时,才真正分配容量。即向数组中添加元素时,数组扩容为10。

   *在一开ArrayList的容器大小是NULL,所以当使用add方法添加元素时,就会执行ensureCapacityInternal(size+1)方法。这时会把实现确定的10这个值给容器的minCapacity变量。然后进行判断这个值和现在elementDate的差是否大于0,因为这时的elementDate还没获取到minCapacity里面的10,所以会执行扩容。然后第二次调用add时,这时的minCapacity会被赋值为2.这时elementDate的值已经被赋值为10,所以就不执行扩容。当它执行到11时就调用grow方法进行扩容。

Set集合的概念和特点:

*无序的、不可重复的

*没有带索引的方法,所以不能用for循环遍历

Hash值的概念:是jdk根据对象的地址或字符串或数组的地址算出来的int型的数值

这里就引出一个常见的面试题:

 == 和 equals和hashCode(这里的hashCode一定是被重写过)之间的区别?

==:当比较的是基本数据类型时比较的时数据的值,而当比较的是引用数据类型时比较的是对象的地址

equals:因为Object是所有类的父类,Object中的equals方法底层代码是用==比较,所以比较的是对象的地址。

当重写了Object中的equals方法时比较的就是对象中的内容是否相等,String、enum、Date、Integer、D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值