关于Arrays.asList的坑

2023-12-26 00:58
文章标签 arrays aslist

本文主要是介绍关于Arrays.asList的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天刷算法时遇到一个 Arrays.asList 的使用问题

        int[] arr0 = {2,5,6,7,1283};List list0 = Arrays.asList(arr0);System.out.println(list0.contains(1283));

返回false

        Integer[] arr = {2,5,6,7,1283};List list = Arrays.asList(arr);System.out.println(list.contains(1283));

返回 true。
这是泛型的问题,你不能对泛型传入基本数据类型

来看下 Arrays.asList 源码

    public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}

这里创建的是Arrays私有的静态内部类ArrayList

    private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable{private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}

若你的数组是 Integer 类型,则这里的 a 就是 Integer[ ] a

跟踪 contains 方法

		public boolean contains(Object o) {return indexOf(o) != -1;}

最后调用的是 o.equals(a[i]) 进行的比较。o 就是我们例子中的1283

        Object ob = 1283;System.out.println(ob.getClass().getName());

返回 java.lang.Integer,也就是说当我们调用 Arrays#contains(1283) 实际上调用的是 Integer#equals 进行的比较,

Integer#equals:public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}

若对象不是 Integer 类型则返回false,这里若传入 int 则会有一个装箱过程。

若我们用 int[ ] 构建,则最后得到的元素是什么类型

        int[] arr0 = {2,5,6,7,1283};List list0 = Arrays.asList(arr0);System.out.println(list0.get(0).getClass().getName());

返回 [I,所以 list0.contains(1283) 才会返回false。

关于 Integer 与 int 的比较问题:java中int与Integer用==比较详解

这篇关于关于Arrays.asList的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537580

相关文章

JavaScript - First step - Arrays

创建数组 任何类型的对象,都可以放入数组中。 var shopping = ['bread', 'milk', 'cheese', 'hummus', 'noodles'];shopping;// (5) ["bread", "milk", "cheese", "hummus", "noodles"]var sequence = [1, 1, 2, 3, 5, 8, 13];var ra

LeetCode --- Median of Two Sorted Arrays

第一次在csdn上写备忘录,以前一直是在笔记本上写,主要是笔记本上可以随意写,只要自己能看懂,在网页上多少都受些限制,另外一方面也是想锻炼下写作能力,为以后的论文做基础吧!最近偶尔上leetcode练些题目,所以也就以这个为主题写一篇试试看,因为能力不足,理解或言辞上会有错误,还望访者不吝赐教,我定当万分感激。 好了,废话也说完了,现在进入正题: 题目: There are two sor

Leetcode207: Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 该方法的核心是将原问题转变成一个寻找第k小数的问

JAVA 一篇文章让你学会Arrays方法

一、常用方法 Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索) 1)toString 返回数组的字符串形式 Arrays.toString(arr) 2)sort 排序(自然排序和定制排序) Integer arrl= {1,-1,7,0,89}; 3)binarySearch 通过二分搜索法进行查找,要求必须排好序 int index = Arrays.b

C.Interface.And.Implementations—dynamic arrays的实现

1、An  array  is a homogeneous sequence of values in which the elements in the sequence are associated one-to-one with indices in a contiguous range.  2、Arrays in some form appear as built-in data typ

第四题:求两个有序数组的中位数(Median of Two Sorted Arrays)

题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请你找出这两个有序数组的中位数。 示例: 输入:nums1 = [1, 3], nums2 = [2] 输出:2.0 输入:nums1 = [1, 2], nums2 = [3, 4] 输出:2.5 要求: 你必须在对数时间复杂度 O(log(min(m, n))) 内解决这个问题。 解题思路 二分

(LeetCode)Intersection of Two Arrays II --- 求交集,不去重

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

(LeetCode)Intersection of Two Arrays --- 求交集

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

Java数组05:Arrays类

本节内容视频链接:Java数组07:Arrays类讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p=57&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5        Java中的‌Array类是一个针对数组进行操作的工具类,‌提供了排序、‌查找等功能‌。‌以下是一些常用的Ar

java Arrays.fill方法介绍

Arrays.fill 是 Java 标准库中的一个方法,用于将数组中的所有元素设置为指定的值。它可以用于一维数组以及多维数组的填充。这个方法非常有用,当你需要快速初始化或重置数组时。 方法签名 // 用于填充一维数组public static void fill(int[] a, int val);// 用于填充指定范围内的一维数组public static void fill(int[