Java 集合框架

List 不唯一、有序;Set 唯一、无序。

Vector 也实现了 List 接口,实现了 ArrayList 的所有操作。主要区别:Vector 线程安全操作相对较慢,ArrayList重速度,线程非安全。长度增长时,Vector 默认增长100%,ArrayList 增长50%。使用 capacity() 方法获取实际的空间。—— 二者默认初始大小皆为 10.

HashCode() 方法的实现:所有用于判断相等的字段在hashCode中都要使用(例如 Hashtable 就是把每一个 Entry 的 hashCode 相加,得到最后的 hashCode:如果某一项是数值,就直接相加等等;如果不是就加上该项的 hashCode)。

HashSet:哈希实现 Set 的特性,故元素顺序不一定恒久不变(加入新元素,可能改变元素遍历顺序);TreeSet:二叉排序树实现 Set,故有序。其他地方和 HashSet 类似。但需要提供办法让元素可比较,有两种方法:

一、让元素自身具备可比性,实现 Comparable<T> 接口

重载其 compareTo 方法,如:

/*
 * 升序(从小到大):比参数小,返回负整数;比参数大,返回正整数。否则返回0
 * 降序反之
 */
@Override
public int compareTo(Dog dog) {
    if(this.intimacy < dog.intimacy) {
        return -1;
    } 
    if(this.intimacy > dog.intimacy) {
        return 1;
    }
    return 0;
}

二、使用比较器,Comparator 接口:

// 降序
TreeSet<Dog> dogs = new TreeSet<>((Dog dog1, Dog dog2) -> {
    if(dog1.getIntimacy() < dog2.getIntimacy())
        return 1;
    if(dog1.getIntimacy() > dog2.getIntimacy())
        return -1;
    return 0;
});

Hashtable 与 HashMap 的原理、功能相同,可以互用。其区别在于:

  1. Hashtable 继承 Dictionary 类,HashMap 实现 Map 接口。
  2. Hashtable 线程安全,HashMap 线程不安全(多线程开发中,酌情使用 Hashtable)。
  3. Hashtable 不允许 null 值,HashMap 允许。
posted @ 2018-02-08 17:41  不抛弃,不放弃  阅读(459)  评论(0编辑  收藏  举报