Airbnb|Java基础之浅谈集合( 四 )


3.2HashSet|——HashSet:底层数据结构是哈希表 ,  线程是不同步的 。 无序 , 高效;
HashSet集合保证元素唯一性:通过元素的hashCode方法 , 和equals方法完成的 。
当元素的hashCode值相同时 , 才继续判断元素的equals是否为true 。
如果为true , 那么视为相同元素 , 不存 。 如果为false , 那么存储 。
如果hashCode值不同 , 那么不判断equals , 从而提高对象比较的速度 。
|——LinkedHashSet:有序 , hashset的子类 。|——TreeSet:对Set集合中的元素的进行指定顺序的排序 。  不同步  。 TreeSet底层的数据结构就是二叉树 。
对于ArrayList集合 , 判断元素是否存在 , 或者删元素底层依据都是equals方法 。
对于HashSet集合 , 判断元素是否存在 , 或者删除元素 , 底层依据的是hashCode方法和equals方法 。 3.3TreeSet

  1. 用于对Set集合进行元素的指定顺序排序 , 排序需要依据元素自身具备的比较性 。
  2. 如果元素不具备比较性 , 在运行时会发生ClassCastException异常 。
  3. 所以需要元素实现Comparable接口 , 强制让元素具备比较性 ,  复写compareTo方法  。
  4. 依据compareTo方法的返回值 , 确定元素在TreeSet数据结构中的位置 。
  5. TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0 , 如果return 0 , 视为两个对象重复 , 不存 。
四、Map接口?4.1映射
  • 映射用来存放键/值对 , 如果提供了键 , 就能查找到值 。
  • Java类库为映射提供了两个通用的实现:HaspMap和TreeMap 。
  • Map集合:
|——Hashtable:底层是哈希表数据结构 , 是线程同步的 。 不可以存储null键 , null值 。
|——HashMap:底层是哈希表数据结构 , 是线程不同步的 。 可以存储null键 , null值 。 替代了Hashtable.
|——TreeMap:底层是二叉树结构 , 可以对map集合中的键进行指定顺序的排序 。
  • Map集合存储和Collection有着很大不同:
Collection一次存一个元素;Map一次存一对元素 。
Collection是单列集合;Map是双列集合 。
Map中的存储的一对元素:一个是键 , 一个是值 , 键与值之间有对应(映射)关系 。
特点:要保证map集合中键的唯一性 。
  • 1 , 添加 。
put(keyvalue):当存储的键相同时 , 新的值会替换老的值 , 并将老值返回 。 如果键没有重复 , 返回null 。
void putAll (Map);
  • 2 , 删除 。
void clear ():清空
value remove (key) :删除指定键 。
  • 3 , 判断 。
boolean isEmpty ():
boolean containsKey (key):是否包含key
boolean containsValue (value) :是否包含value
  • 4 , 取出 。
int size ():返回长度
value get (key) :通过指定键获取对应的值 。 如果返回null , 可以判断该键不存在 。 当然有特殊情况 , 就是在hashmap集合中 , 是可以存储null键null值的 。
Collection values (): 获取map集合中的所有的值 。
  • 5 , 想要获取map中的所有元素:
原理:map中是没有迭代器的 , collection具备迭代器 , 只要将map集合转成Set集合 , 可以使用迭代器了 。 之所以转成set , 是因为map集合具备着键的唯一性 , 其实set集合就来自于map , set集合底层其实用的就是map的方法 。