java的hashMap是如何工作的。
HashMap是一个针对数据结构的键值,每个键都会有对应的值,关键是识别这样的值。
HashMap基于hash原理,我们通过put()和set()方法存储和获取对象的,当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashCode,然后找到桶位置存储值对象的。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap底层使用LinkedList来解决碰撞问题的。当发生碰撞了。对象将会存储在LinkedList的下一个节点中。HashMap在每个LinkedList节点中存储对对象。
然后我们知道是HashMap是非同步的、所以我们需要一个同步的HashMap时,有两个钟选择:
第一种就是Collections.synchronizedMap()来同步HashMap
第二种方法就是ConcurrentHashMap.这时我们即不需要锁定整个锁对象。
java里面的容器:
分两类,Map和Collection.而Collection有子接口List(数据存储顺序和插入顺序是一样的),Set(里面的元素具有唯一性)
Map是存储键值对的,里面的键是不可以重复的,但值可以重复的。
a. 对于List主要有ArrayList和LinkedList两种实现。
实现的数据结构不同。所以主要的却比也都是和数据结构相关的。
ArrayList基于数组的,随机访问快,而对于中间元素的插入和删除效率比较低。而且需要考虑扩容问题。
LinkedList,则基于链表,和ArrayList提到正好相反,但对于中间的元素的插入和删除 更有效率的。
b. 说下List,Set,Map三种结合各有什么特性
List集合中的元素是有序可重复的
Set集合的元素时无序不可重复的
Map集合用key-value存放对象的,Map容器中的键对象是 不可重复的,但是值是可重复的。
c. HashSet和TreeSet有什么区别,什么时候用他们?
区别:HashSet中的元素不能重复, 没有顺序的。
TreeSet中的元素不能重复,但是有顺序的。
当集合的元素需要排序是,用TreeSet
一般情况下用HashSet,因为不要排序,速度比TreeSet快。
d. HashMap和Hashtable去什么区别,一般情况下常用那个?
HashMap的键值都可以为空,但是线程不安全。
Hashtable的键值都不可以为空,但是线程安全。
一般情况下,我们都用的是HashMap.
e. HashMap与LinkedHashMap和TreeMap的区别
共同点:HashMap,LikedHashMap,TreeMap都属于Map的实现类
不同点:HashMap里面存入的键值对子啊取出来的时候是随机的。
TreeMap取出来的是排序后的键值对。
LinkedHashMap是HashMap的一个子类,如果需要 输出的顺序和输入的相同,那么用LinkedHashMao
可以实现。
f 如何对一个对象排序,有几种方法
吧对象放入List集合中,用Collection是工具类调用sort()方法进行排序,但是这个类必须实现Compable接口才行。
吧对象放在set集合中,用treeSet()实现诶对集合排序。