Java面试系列07(集合)

集合只能存放引用数据类型的数据。

 

集合分类:

集合的从属关系:

两类集合Collection、Map

Collection包括List、Set

List包括:Vector\ArrayList\LinkedList

Set包括:HashSet\TreeSet\LinkedHashSet

Map包括:HashMap\TreeMap\HashTable

 

ArrayList和Vector的底层是相同的,Vector是线程安全的、ArrayList是线程不安全的。

HashMap是线程不安全的、HashTable是线程安全的。(结构相同)

 

HashSet的底层使用的是HashMap,且其Value都是同一个Object对象。

Hashmap底层结构是一个数组链表式结构,

第一层是一个长度为6的数组,数组的每个元素是一个链表。

链表的节点是node(实现了entry的一个类。entry在map中被定义为内部接口)

 

向hashmap里插入元素的过程

首先第一步是计算K对象的Hashcode值,通过hashcode%数组长度取模运算,得到此hashcode值对应的数组下标。

然后从第一个节点开始与K比较hashcode值,如果hashcode值相同再执行equeals方法。如果equals方法返回true,则对相应节点的valude进行覆盖,如果不为真则继续比较下一个节点,直到相同。如果最后都不相同则会在尾部插入此KV node。

 

hashset中存入的值就是每一个node 的K。它的底层是hashmap,所以都是相同的,不同的也是在map的基础上又改了改。

 

排序  TreeMap、TreeSet

 第一种方法在TreeMap的构造方法中传入Compartor接口的匿名对象。

new  TreeMap(new Compartor<String>{ 实现compare<String>方法 })  

第二种方法是使元素对象实现Comparable接口实现CompareTo方法

这两个方法,都会返回整数,大于0的表示新插入的比旧的大,

TreeMap是升序的。

 

三种遍历list集合的方式

iterator

三个方法hasnext next remove

高级for

通过获取size来用for遍历。

两种遍历set的方式

keyset()+iterator

keyset()+for

 

三种遍历map

map.entryset()+for

keyset()+iterator

keyset()+for

posted on 2019-08-12 17:25  暮城暮雪  阅读(93)  评论(0编辑  收藏  举报

导航