Java 获取集合时出现问题。双精度数组的shuffle()正在工作
我试图在JavaBean中洗牌一个double数组,以便在JSP文件中使用 在java bean的默认构造函数中,我有:Java 获取集合时出现问题。双精度数组的shuffle()正在工作,java,jsp,collections,javabeans,shuffle,Java,Jsp,Collections,Javabeans,Shuffle,我试图在JavaBean中洗牌一个double数组,以便在JSP文件中使用 在java bean的默认构造函数中,我有: amounts = new double[] {0.5, 1, 1.5, 2, 2.5. 3, 3.5, 4}; Collections.shuffle(Arrays.asList(amounts)); 我可以调用bean的方法,但由于某些原因,amounts数组保持不变,因此它不是无序的,就是默认构造函数没有执行。没有抛出错误,因此我相信可能是构造函数没有执行,但我无
amounts = new double[] {0.5, 1, 1.5, 2, 2.5. 3, 3.5, 4};
Collections.shuffle(Arrays.asList(amounts));
我可以调用bean的方法,但由于某些原因,amounts数组保持不变,因此它不是无序的,就是默认构造函数没有执行。没有抛出错误,因此我相信可能是构造函数没有执行,但我无法找出原因
在我的JSP中,我使用:
<jsp:useBean id="myBean" class="logic.logicBean" scope = "session" />
我认为这样做时,默认构造函数会执行,这是错误的吗?数组。asList(amounts)
期望T…
,其中T
是一种对象类型。这里的问题是您传递的是double[]
,因此您的列表实际上是list
——而不是list
。其他答案不正确,因为数组.asList
保证“写入”到支持数组
看
返回指定数组支持的固定大小列表。(对返回的列表的更改“直写”到数组。)
为了证明这一点,请尝试将金额
声明为Double[]
,并允许编译器自动装箱(同时确保更正文本的类型,即添加.0
或D
后缀):
请注意,它现在将正常工作:-)为什么要使用
double[]
而不是List
?酷。我试过了,成功了。它是如何改变原来的?通过指针?线我不认为这是一个线程。@tuğrulbüyükıkık数组。asList
使用一个只需实现List
和RandomAccess
并使用底层数组的实现。仅交换元素(“此实现向后遍历列表…将随机选择的元素交换到“当前位置”),这不需要操作数组。asList
不支持(即插入和删除)。@cheesemanDouble
是一种对象类型,特别是编译器自动处理的double
double
是一种基本数据类型,而double[]
和所有数组类型都是对象类型;将double[]
传递给数组。asList
需要T..
参数作为T
的某个对象类型,并且由于传递了单个对象,它认为您需要List
@cheeseman,方法是显式地将数量
设置为double[]
类型,然后编译器识别您传递了一个Double
对象数组(T..
匹配Double[]
,因为T
是Double
),从而创建列表,实际上可以有意义地对其进行洗牌(按照您预期的方式)。另一方面,洗牌一个单一对象的列表实际上并没有任何作用。我想我理解了,一些非常有趣的东西,我将阅读更多内容,非常感谢!
amounts = new Double[] { 0.5, 1.0, 1.5, 2.0, 2.5, 3, 3.5, 4.0 };