常用类库之二 ---- Objects

目录

Objects类

        介绍

        方法

                checkFromIndexSize(int fromIndex, int size, int length)

                checkFromToIndex(int fromIndex, int toIndex, int length)

                checkIndex(int index, int length)

                deepEquals(Object a, Object b)

                equals(Object a, Object b)

                hash(Object... values)

                hasCode(Object o)

                isNull(Object obj)

                nonNull(Object obj)

                toString(Object o)

                toString(Object o, String nullDefault)


          介绍

                此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序           包括nullnull方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及           检查索引或子范围值是否超出范围。

                Objets位于java.util 下,extends Object。主要处理空指针安全的问题,所谓空指针就是            说在引用一个空对象的方法时,会抛出NullPointerException空指针异常。

                Objects类中所有的方法都是静态的,不需要实例化对象再调用,可直接通过类名进行调            用。

          方法

                checkFromIndexSize(int fromIndex, int size, int length)

                作用:检查是否在子范围从fromIndex(包括)到fromIndex+size(不包括)是范围界限            内0(包括)到length(不包括)

                  如果以下任何不等式为真,则子范围被定义为超出界限:

                        fromIndex < 0

                        size < 0

                        fromIndex + size >length,考虑到整数溢出

                        length < 0

                参数:

                        fromIndex - 子间隔的下限(包括)

                        size - 子范围的大小

                        length - 范围的上限(不包括)

                返回结果:      

                        如果符合则返回1,不符合则抛出异常:IndexOutOfBoundsException

                版本:9

                TEST:

package com.java;

import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int res = Objects.checkFromIndexSize(1, 3, arr.length);
        System.out.println(res);  
        // 1
        int res1 = Objects.checkFromIndexSize(0, 6, arr.length);
        System.out.println(res1); 
        // IndexOutOfBoundsException: Range [0, 0 + 6) out of bounds for length 5
    }
}

                                

 checkFromToIndex(int fromIndex, int toIndex, int length)

       作用:检查是否在子范围从fromIndex (包括)到toIndex (不包括)是范围界限内0 (包                        括)到length (不包括)。

                如果以下任何不等式为真,则子范围被定义为超出界限:

                        fromIndex < 0

                        fromIndex > toIndex

                ​​​​​​​        ​​​​​​​toIndex > length

​​​​​​​​​​​​​​        ​​​​​​​        ​​​​​​​        length < 0 ,这是前者的不平等所暗示的

        参数:

                ​​​​​​​fromIndex - 子范围的下限(包括)

​​​​​​​​​​​​​​        ​​​​​​​        toIndex - 子范围的上限(不包括)

​​​​​​​​​​​​​​        ​​​​​​​        length - 上限(不包括)范围

        返回结果:

                如果子范围内的范围内,返回fromIndex;如果子范围超出范围则抛出异常:                         IndexOutOfBoundsException。

        版本:9

        TEST:

package com.java;

import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int res = Objects.checkFromToIndex(2,5,arr.length);
        System.out.println(res);  // 2
    }
}

checkIndex(int index, int length) 

        作用:检查index是否在0 (含)到length (不包括)范围内。

                如果以下任何不等式为真,则定义index超出范围:

                        index < 0

                        index >= length

                        length < 0

        参数:

                index - 该指数

                length - 范围的上限(不包括)

        返回结果:如果在范围内,返回index;如果index超出界限,抛出异常:                                           IndexOutOfBoundsException

        版本:9

        TEST:

package com.java;

import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int res = Objects.checkIndex(4,arr.length);
        System.out.println(res); // 4
    }
}

equals(object a, object b)

        作用:判断参数的引用地址是否相等,分为以下情况:

                1、参数皆为null,返回true;

                2、参数皆为字符串且为空(""),返回true;

                3、其中一个参数为null 或 “”,另一个参数不为null 或 “”,都返回false。

        参数:

                a - 一个对象

                b - 要与a进行比较以获得相等性的对象

        使用方法:

package com.java;

import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] arr1 = {1,2,3,4,5};
        boolean res = Objects.equals(arr,arr1);
        System.out.println(res); // false
    }
}

        注意:不会抛出空指针异常

        源码:

public static boolean equals(Object a, Object b) {
    // 先对引用地址进行判断,再进行判断是否为null
    return (a == b) || (a != null && a.equals(b));
}

deepEquals(Object a, Object b)

        作用:不仅比较数值是否相等,同时也要比较对象中的内容是否相同,相同返回true

        使用:

package com.java;

import javax.management.ObjectName;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] arr1 = {1,2,3,4,5};
        boolean res = Objects.equals(arr,arr1);
        boolean res1 = Objects.deepEquals(arr,arr1);
        System.out.println(res); // false
        System.out.println(res1); // true
    }
}

 源码:

public static boolean deepEquals(Object a, Object b) {
     if (a == b)
        return true;
     else if (a == null || b == null)
        return false;
     else
        return Arrays.deepEquals0(a, b);
}

hash(Object... values)  和 hashCode(Object o)

        作用:前者为一系列输入值生成哈希码

                   后者也是为输入值生成哈希码

        使用:

package com.java;

import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        int res = Objects.hashCode("a");
        int res1 = Objects.hash("a");
        System.out.println(res);  // 97
        System.out.println(res1); // 128
    }
}

        源码:

public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}

         参数: o - 一个对象

        返回结果:不为null时,返回哈希码;为null时,返回0。

public static int hash(Object... values) {
    return Arrays.hashCode(values);
}

// Arrays.java
public static int hashCode(Object a[]) {
    if (a == null)
        return 0;

    int result = 1;

    for (Object element : a)
       result = 31 * result + (element == null ? 0 : element.hashCode());

    return result;
}
  • 为一系列输入值生成哈希码。 生成哈希码,好像所有输入值都放在一个数组中,并通过调用Arrays.hashCode(Object[])对该数组进行哈希处理
    • 此方法对于在包含多个字段的对象上实现Object.hashCode()非常有用。 例如,如果有三个字段,对象xy ,和z ,一个可以这样写:

       @Override public int hashCode() {
           return Objects.hash(x, y, z);
       }
      

        参数: values - 要散列的值

        返回结果:输入值序列的哈希值,在hash值的基础上 + 31*result

 

        isNull(Object o) 

        作用:用来判断是否为null

        参数:​​​​​​​o - 针对 null进行检查的参考

        返回结果:如果为null,则返回true,否则false

        TEST:

package com.java;

import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        boolean b = Objects.isNull(null);
        boolean b1 = Objects.isNull("123");
        System.out.println(b); // true
        System.out.println(b1); // false
    }
}

        源码:

public static boolean isNull(Object obj) {
    return obj == null;
}

        nonNull(Object o) 

        作用:和isNull相反

        TEST:

package com.java;

import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        boolean b = Objects.nonNull(null);
        boolean b1 = Objects.nonNull("123");
        System.out.println(b); // false
        System.out.println(b1); // true
    }
}

        源码:

public static boolean nonNull(Object obj) {
    return obj != null;
}

        toString​(Object o)

        作用:判断是否为null

        参数:

        返回结果:如果是null,返回null;否则返回o。

        TEST:

package com.java;

import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        String s = "welcome";
        String s1 = null;
        System.out.println(Objects.toString(s)); // welcome
        System.out.println(Objects.toString(s1)); // null
    }
}

        源码: 

public static String toString(Object o) {
    return String.valueOf(o);
}


// String.java
public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

       

        toString(Object o, String nullDefault) 

        作用:用来判断是否为 null

        参数: o - 对象

                    nullDefault - 如果第一个参数是null,返回的字符串

        返回结果:

                如果第一个参数为null,则返回第二个参数;如果不为null,则返回第一个参数

        TEST:

package com.java;

import javax.management.ObjectName;
import javax.naming.event.ObjectChangeListener;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        System.out.println(Objects.toString(null, "welcome")); // welcome
        System.out.println(Objects.toString("123","welcome")); // 123
    }
}

        源码:

public static String toString(Object o, String nullDefault) {
    return (o != null) ? o.toString() : nullDefault;
}

 

        路漫漫其修远兮,吾将上下而求索!欢迎交流指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Guava类库中的Table是一个双键的Map,可以理解为一个行列式的数据结构。 Table可以用来表示一个映射,其中每个键都有一个与之关联的值,而且这个键需要由两个参数来确定。在Table中,第一个键称为"行键",第二个键称为"列键",而对应的值称为"值"。 Table的实现方式可以看作是一个Map<RowKey, Map<ColumnKey, Value>>的嵌套结构,其中RowKey和ColumnKey分别表示行键和列键,Value表示对应的值。 Table提供了多种视图,包括行视图、列视图、单元格视图等,这些视图可以方便地进行表格的操作和查询。 下面是一个简单的示例代码: ```java Table<String, String, Integer> table = HashBasedTable.create(); table.put("row1", "col1", 1); table.put("row1", "col2", 2); table.put("row2", "col1", 3); table.put("row2", "col2", 4); System.out.println(table.get("row1", "col1")); // 输出1 System.out.println(table.row("row1")); // 输出{col1=1, col2=2} System.out.println(table.column("col1")); // 输出{row1=1, row2=3} System.out.println(table.cellSet()); // 输出[(row1,col1)=1, (row1,col2)=2, (row2,col1)=3, (row2,col2)=4] ``` 在上面的示例中,我们创建了一个Table对象,并往其中添加了四个元素。然后,我们分别通过get方法、row方法、column方法和cellSet方法获取了对应的视图,并输出了它们的内容。 需要注意的是,Table中的行键、列键和值都可以为null,但是在使用时需要特别注意空指针异常的问题。此外,Table中的行键和列键必须实现equals和hashCode方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值