zoukankan      html  css  js  c++  java
  • 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 允许。
  • 相关阅读:
    37 什么时候使用内部临时表
    2 Hadoop集群安装部署准备
    36 为什么临时表可以重名
    maven内置属性
    ProGuard 最全混淆规则说明
    stylus的用法
    vscode 插件 配置
    关于overflow:hidden
    vue-devtools/安装vue-devtools
    对Java中使用两个大括号进行初始化的理解
  • 原文地址:https://www.cnblogs.com/quanxi/p/8432555.html
Copyright © 2011-2022 走看看