zoukankan      html  css  js  c++  java
  • Java 集合相关

    对整个体系做一个记录,并不涉及详细应用

    Object类

    1. 重写toString方法

    System.out.println可以打印任何对象在于Object类拥有一个方法

    public String toString()
    

    所以子类为了能够正常打印数据,应该对此方法进行重写

    2. 重写equals方法

    Java中==符号只是检查两个引用是否指向同一对象,因此,类如果想实现对象是否等价的判断,亦需要对equals方法进行重写

    重写equals方法的原则

    • 自反性(只要一个对象的引用不为null,那么这个引用对自身调用equals将等于true)
    • 对称性(a.equals(b)的结果应该与b.equals(a)的结果一致)
    • 传递性(如果a等于b,b等于c,那么a应该要等于c)
    • 一致性(在两个参与的对象都未曾改变的情况下,多次比较的结果应该相同)
    • null不等于null(即未知不等于未知)
    • 最后一条:重写了equals方法就必须要重写hashCode方法(不然两个等价的对象可能会得到不同的哈希码,那么在使用集合时会产生严重错误)
    3. 重写hashCode方法

    管理很多对象时如果采用数组这一线性表结构,查找效率将会很低,所以需要采用哈希表进行存储。
    哈希表原理如下

    1. 进入哈希存储前,首先调用对象的hashcode方法获取其哈希码,定位对象所在的哈希桶
    2. 在哈希桶内部,所有的哈希码相同的不同对象是按线性表的方式存储的

    Ordered与Sorted接口

    Ordered的排序功能由指定的权值排序,相应的类与接口有

    ArrayList
    Vector
    LinkedList
    List
    LinkedHashSet
    

    Sorted的排序功能由元素自身的权值排序,相应的类与接口有

    TreeSet
    TreeMap
    SortedSet
    SortedMap
    

    Java集合类

    Ordered相关

    1. List接口

    实现了List接口的类有ArrayList,Vector,LinkedList

    2. Set接口

    Set接口与List接口的不同之处

    • Set中不能有重复元素,而List无此要求
    • Set中的元素是无序的

    实现了Set接口的类有HashSet,LinkedHashSet

    HashSet元素的判重过程如下

    • 当一个对象将要插入集合时,首先调用对象的hashCode方法,若hashCode返回值指向的哈希桶为空,则成功插入
    • 若指向的哈希桶不为空,则调用equals方法拿哈希桶中元素与此对象进行比较,如不同,则成功插入
    • 否则插入失败

    Sorted相关

    1. SortedSet接口

    与基于Order的Set接口不同,SortedSet接口将安装元素权值进行排序
    实现了SortedSet接口的类有TreeSet类

    自定义权值排序方法,对于一个类,我们必须实现Comparable接口方可按照自己的想法建造一个TreeSet集合,当然也可指定比较器进行构造

    class a implements Comparable{
       int v;
       @Override
       public int compareTo(Object o){
           a t=(a)o;
           return this.v-t.v;
       }
    }
    class cmp implements Comparator{
       public int compare(Object o1,Object o2){
           
       }
    }
    

    映射

    Map接口

    实现了Map接口的有HashMap,Hashtable

    SortedMap接口

    相较于Map接口,SortedMap同时具有Sorted接口的排序功能,遍历的时候有所不同

    栈的实现

    Stack类
    Deque接口

    因为Stack类继承自Vector类,可以会对性能有所影响,因此提供有一个Deque接口

    实现了Deque接口的类有ArrayDeque,LinkedBlockingDeque,LinkedList

    集合的常见操作

    1. 元素排序
    Collections工具类
    public static void sort(List list)
    public static void sort(List list,Comparator cmp)
    
    2. 搜索
    Collections工具类
    public static int binarySearch(List list,Obeject key)
    public static int binarySearch(List list,Obeject key,Comparator cmp)
    
    3. 打乱顺序
    Collections工具类
    public static void shuffle(List list)
    
  • 相关阅读:
    react Native 运行报错之一 gradle-2.14.1-all解压失败的问题
    react native windows create bundle folder
    gulp+browserSync+nodemon 实现express 全端自动刷新的实践
    nodejs框架express4.x 学习--安装篇
    转: angularjs 指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效
    angular 基础练习
    自己写的数组排重+排序
    前端开发bower包管理器
    定位网站性能的一些经验
    记一次大规模数据迁移和加密
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6923726.html
Copyright © 2011-2022 走看看