关于集合的复习
常见的集合有哪些?
答:分为三种集合 List、Set、Map
List:ArrayList、LinkedList、Vector
Set:HashSet、LinkedHashSet、TreeSet
Map:HashMap、HashTable、LinkedHashMap、TreeMap、Properties
Properties是一个特殊的Map,用于加载配置文件。
HashMap和HashTable的区别?
答:1、HashMap不考虑同步,线程不安全;HashTable使用了synchronized 关键字,可同步,线程安全。
2、HashMap 键值对允许为空,HashTable键值对不允许为空
3、HashMap和HashTable的父接口不同
什么是哈希冲突?
答:传入两个不同内容的元素,可最后插入集合的时候,它们的哈希值是不同,但经过哈希算法分配的地址也是一样的,就是两个元素在哈希表中的位置一样,
需要在这个位置链出一个位置,放元素。 这个过程叫连地址法。
如何解决HashMap的哈希冲突?
答:使用链地址法
ArrayList 、Vector、LinkedList的区别?
答:1、两者的扩容规则不同,ArrayList的扩容规则是 新容量=旧容量+旧容量/2;Vector的扩容规则是 新容量的=旧容量+扩容因子;
2、ArrayList线程不安全,Vector线程安全,LinkedList线程不安全。
3、LinkedList底层数据结构是链表、ArrayList和Vector底层数据结构是数组。
4、LinkedList实现了List接口外,还实现了栈接口,队列接口。可以使用栈和队列的方法,栈push、pop 等 队列 add和remove等
如果我想要用自己的Object作为Map的K,该怎么做呢?
答:在Object是重写hashCode和equalsf方法
1、hashCode是为了哈希算法计算存储的位置
2、equals是为了保证的元素在哈希表中的唯一性
如果我想要往TreeSet中存入Object元素,该怎么做呢?
答:要提供比较策略,内部比较器和外部比较器
内部比较器:Object内部实现Comparable接口并实现compareTo方法。
外部比较器:一个自定义比较器实现Comparator接口并实现compare方法,在将Object存入TreeSet时,把自定义比较器放入。
在将Object存入TreeSet时,匿名内部类 new Comparator 并实现compare方法。