- 浏览: 7960748 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
居然也碰到这个陷阱的问题了,查了下书,终于解决,大概讲解如下,
代码如下:
注意这里输出的数量是1,原因是,在Arrays.asList中,其接收的参数原型其实是泛型变长参数来的,而基本类型是不能作为范型的参数,按道理应该使用包装类型,但这里缺没有报错,
因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组
可以看到,输出的为元素类型:class [I
因为jvm不可能输出array类型,array类型属于java.lang.reflect包,通过反射访问
数组的这个类,编译时候生成的。所以要改为:
此外,假如如下代码:
注意这里用add会出错,因为是arrays.aslist中,看代码可以看到这里返回的
ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个
静态私有内部类,并没有提供add方法,要自己实现,所以这里是出错了,因此,
除非确信array.aslist后长度不会增加,否则谨慎使用:
List<String> abc=Arrays.asList("a","b","c"),因为这样的长度是无法再add的了
参考:《高质量java代码151个建议》建议65,66
代码如下:
public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size()); }
注意这里输出的数量是1,原因是,在Arrays.asList中,其接收的参数原型其实是泛型变长参数来的,而基本类型是不能作为范型的参数,按道理应该使用包装类型,但这里缺没有报错,
因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组
int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("元素类型:" + list.get(0).getClass()); System.out.println("前后是否相等:"+data.equals(list.get(0)));
可以看到,输出的为元素类型:class [I
因为jvm不可能输出array类型,array类型属于java.lang.reflect包,通过反射访问
数组的这个类,编译时候生成的。所以要改为:
Integer[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size());
此外,假如如下代码:
//枚举,声明一个星期 enum Week{Sun,Mon, Tue, Wed,Thu,Fri,Sat} public static void main(String[] args) { //工作日 Week[] workDays = {Week.Mon, Week.Tue, Week.Wed,Week.Thu,Week.Fri}; //转换为列表 List<Week> list = Arrays.asList(workDays); //增加周六也为工作日 list.add(Week.Sat);
注意这里用add会出错,因为是arrays.aslist中,看代码可以看到这里返回的
ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个
静态私有内部类,并没有提供add方法,要自己实现,所以这里是出错了,因此,
除非确信array.aslist后长度不会增加,否则谨慎使用:
List<String> abc=Arrays.asList("a","b","c"),因为这样的长度是无法再add的了
参考:《高质量java代码151个建议》建议65,66
评论
2 楼
xbyang18
2012-12-11
有本书不错,叫什么java建议观点什么的,里面谈到了这样的例子
1 楼
crud0906
2012-12-08
源码:
这里的ArrayList只是一个内部类
第一个问题,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以data变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1。这个1最能说明问题。
int[] a = (int[]) list.get(0); // 这里转型不会报错
System.out.println(a.getClass().isArray()); // 这里输出true
编译器对Integer[] 处理则不一样
第二个问题,会抛异常UnsupportedOperationException,看了源码很好理解。
public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); }
这里的ArrayList只是一个内部类
第一个问题,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以data变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1。这个1最能说明问题。
int[] a = (int[]) list.get(0); // 这里转型不会报错
System.out.println(a.getClass().isArray()); // 这里输出true
编译器对Integer[] 处理则不一样
第二个问题,会抛异常UnsupportedOperationException,看了源码很好理解。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1603方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2027前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3484info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2248import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 501https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 700public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 626https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 679https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 445https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5571 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3116微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 628https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1851什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 974本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1384原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 874public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 681在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 948-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 778一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1915介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
`Arrays.asList`方法是Java中一个非常实用的工具,它允许我们将数组转换为`List`对象,以便在处理数组时可以利用`List`接口提供的便利。然而,这个方法有一些特殊的特性和限制,需要我们理解清楚才能正确使用。下面...
Java中使用Arrays.asList初始化ArrayList实例方法 在 Java 中,使用 Arrays.asList 方法可以快速创建一个 List 集合,但是需要注意的是,这个方法返回的 ArrayList 并不是 java.util.ArrayList 对象,而是一个内部...
Java中Arrays.asList()方法详解及实例 Arrays.asList()方法是Java中一个常用的方法,它将数组转换为列表。该方法的签名为`public static <T> List<T> asList(T... a)`,它可以接受变长参数,通常情况下是一个数组...
"Java Arrays.asList使用方法解析" Java Arrays.asList使用方法解析是Java中一个非常重要的知识点,主要介绍了Arrays.asList的使用方法和原理。Arrays.asList方法的作用是将数组或一些元素转换为集合,但需要注意的...
在Java编程中,Arrays.asList()方法和ArrayList是两种不同的方式来处理列表数据,它们之间存在显著的区别。这篇文章将深入探讨这两个概念以及它们在实际使用中的差异。 首先,Arrays.asList()是一个Java内置方法,...
在Java编程中,`Arrays.asList()`方法是一个非常实用的工具,它允许我们将数组转换成一个`List`对象。这个方法在处理数组与集合之间的转换时,提供了很大的便利。下面我们将深入探讨`Arrays.asList()`方法的使用细节...
Arrays.asList、ArrayList的subList坑
Java中的`Arrays.asList()`方法是Java集合框架的一部分,它允许我们将数组或变长参数转换为一个固定大小的`List`对象。这个方法在处理数组与集合之间的转换时非常有用,尤其是当你需要使用集合API操作数组时。下面...
而一开始asList()的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用as
`Arrays.binarySearch()`方法允许我们在有序数组中查找指定元素,并返回该元素的索引。如果数组中不存在该元素,则会返回一个负数,这个负数的绝对值是插入该元素位置的前一个位置。 首先,让我们详细了解一下`...
`System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...
temp.addAll(Arrays.asList(lowercase)); } else if (type == TYPE.CAPITAL) { temp.addAll(Arrays.asList(capital)); } else if (type == TYPE.NUMBER) { temp.addAll(Arrays.asList(number)); } else if ...
当我们在实际业务开发过程中,难免会遇到数组转List的操作,通常我们所选择的就是上面的Arrays.asList进行操作,但是,对的但是来了,我们在使用的时候会发现基本数据类型的参数转化的结果会和我们想要的结果完全不...
`strings.xml`和`arrays.xml`文件是Android资源文件中的核心组件,用于存储应用程序中的文本和数组数据。这些文件通常包含不同语言的字符串资源,以便在不同地区展示相应的本地化内容。 本话题涉及一个脚本程序,它...
Apress.PHP.Arrays.Single.Multi-dimensional.Associative.and.Object.Arrays.in.PHP.7.1484225554.rar 最新书籍,精讲PHP数组,文字版PDF
"JAVA基于Arrays.sort()实现数组升序和降序" 在 Java 中,排序数组是非常常见的操作之一,而 Java 提供了多种方式来实现数组的排序,其中一种常用的方法是使用 Arrays.sort() 方法。今天,我们将详细介绍如何使用 ...
这里我们使用了Arrays.asList()方法来创建一个不可变的List集合,并将其初始化为七个Person对象。 Arrays.asList() vs List.of() 需要注意的是,Arrays.asList()和List.of()都是用于创建List集合的方法,但是它们...
在本例中,由于使用了`Arrays.asList()`创建列表,因此实际的子类是`ArrayList`。`ArrayList`的`sort()`方法最终会调用`Arrays.sort()`。 `Arrays.sort()`的实现相当复杂,它采用了混合排序算法——TimSort。...
在Java中,我们可以将数组转换为List对象,利用`Arrays.asList()`方法即可实现。例如: ```java String[] animals = {"Tiger", "Lion", "Cat", "Dog", "Deer", "Chicken", "Sheep", "Horse", "Rabbit", "Snake"};...