Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Java中将泛型列表转换为泛型数组?

如何在Java中将泛型列表转换为泛型数组?
EN

Stack Overflow用户
提问于 2016-12-03 23:54:30
回答 3查看 2.3K关注 0票数 0

我试图编写一个泛型类来对任意类型的数组进行排序。

第一个排序函数对任何类型的数组进行排序。工作很好。

在第二个排序函数中,我传递了list并尝试将其转换为数组来使用第一个排序函数。但是,当我试图将list转换为泛型类中的数组时,它会引发意外的类型错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

    public class Sort<T extends Comparable>{
         //public T l;
         T tmp;
        public  void sort(T[] l){

        for(int i=0;i<l.length;i++){
           for(int j=i+1;j<l.length;j++){
              if(l[i].compareTo(l[j])>0){
                   tmp=l[i];
                  l[i]=l[j];
                   l[j]=tmp;
              }
            }
        }
                    System.out.println( Arrays.asList(l));
              }
         public  <T extends Comparable>  void sort(List<T> l){
          T[] array = (T[]) new Object[l.size()];
          sort(l.toArray(T[] array));
      // System.out.println(l);
         }   

    public static void main(String[] args){
                Integer[] i={2,4,1,5,3};
                List<String> l = Arrays.asList("c","d","a","e","b");
                Sort s=new Sort();
                //String[] j=l.toArray(new String[l.size()]);
                s.sort(i);
                s.sort(l);

            }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-04 01:02:10

正如n247s所建议的,如果您希望类和方法之间具有一致性,那么它们应该使用相同的参数化类型。

它提出了另一个问题:如果你这样做,你不应该混合橘子和香蕉,因为否则你的那类可能会产生意想不到的结果。假设您在数组或列表中添加了一个可比较对象的组合,这些对象不是设计用来在它们之间进行比较的:StringBooleanCustomClassWhichIsComparable

此外,在将列表转换为数组的方法中,希望在Comparable数组中分配一个Comparable数组。但是您不能这样做,因为所有Object实例都不一定是Comparable实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public  <T extends Comparable>  void sort(List<T> l){
   T[] array = (T[]) new Object[l.size()];
   sort(l.toArray(T[] array));
 }  

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void sort(List<T> l) {
  T[] array = (T[]) new Comparable[l.size()];
  sort(l.toArray(array));
}

在这两种情况下,您都会有警告,但也没有例外。

下面是建议修改的类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Sort<T extends Comparable<T>> {

    T tmp;


    public void sort(T[] l) {

    for (int i = 0; i < l.length; i++) {
        for (int j = i + 1; j < l.length; j++) {
          if (l[i].compareTo(l[j]) > 0) {
            tmp = l[i];
            l[i] = l[j];
            l[j] = tmp;
          }
        }
    }
      System.out.println(Arrays.asList(l));
    }

    public void sort(List<T> l) {
       T[] array = (T[]) new Comparable[l.size()];
       sort(l.toArray(array));
     }

    public static void main(String[] args) {
      Integer[] i = { 2, 4, 1, 5, 3 };
      Sort<Integer> sortInt = new Sort<Integer>();
      sortInt.sort(i);

      Sort<String> sortString = new Sort<String>();
      List<String> l = Arrays.asList("c", "d", "a", "e", "b");
      sortString.sort(l);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-12-04 00:19:45

这是因为您没有在类级别上暗示任何泛型参数(例如Sort(<)String(>) s = new Sort<>()),这意味着您将不能将它与整数数组一起使用(如果您使用Integer作为泛型类型,则反之亦然)。我要做的是在方法级别上使用泛型参数。(与第二种方法一样)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Sort {

    public  <T extends Comparable> void sort(T[] l){
    T tmp;
    for(int i=0;i<l.length;i++){
       for(int j=i+1;j<l.length;j++){
          if(l[i].compareTo(l[j])>0){
               tmp=l[i];
              l[i]=l[j];
               l[j]=tmp;
          }
        }
    }
                System.out.println( Arrays.asList(l));
          }
     public  <T extends Comparable>  void sort(List<T> l){
      T[] array = (T[]) new Object[l.size()];
      sort(l.toArray(T[] array));
  // System.out.println(l);
     } 
票数 1
EN

Stack Overflow用户

发布于 2016-12-04 00:19:22

问题是第二个<T extends Comparable>方法中的sort。此类型T正在隐藏类类型T

您可以重命名它,但是由于您没有在第一个方法中返回某些内容,所以最快的解决方法就是忽略它,这样编译器就会再次高兴起来。从代码开始,这将转换为如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void sort(List<T> l){
    T[] array = (T[]) new Object[l.size()];
    sort(array);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40956596

复制
相关文章
Python使用pyopencl在GPU上并行处理批量判断素数
扩展库pyopencl使得可以在Python中调用OpenCL的并行计算API。OpenCL(Open Computing Language)是跨平台的并行编程标准,可以运行在个人电脑、服务器、移动终端以及嵌入式系统等多种平台,既可以运行在CPU上又可以运行于GPU上,大幅度提高了各类应用中的数据处理速度,包括游戏、娱乐、医学软件以及科学计算等等。 import numpy as np import pyopencl as cl import pyopencl.array from pyopencl.ele
Python小屋屋主
2018/04/16
1.9K0
opencl:获取每个计算单元(CU)中处理元件(PE)的数目
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51480033
10km
2019/05/25
2K0
如何计算 LSTM 的参数量
之前翻译了 Christopher Olah 的那篇著名的 Understanding LSTM Networks,这篇文章对于整体理解 LSTM 很有帮助,但是在理解 LSTM 的参数数量这种细节方面,略有不足。本文就来补充一下,讲讲如何计算 LSTM 的参数数量。
Alan Lee
2020/10/29
2.5K0
如何计算 LSTM 的参数量
macOS的OpenCL高性能计算
随着深度学习、区块链的发展,人类对计算量的需求越来越高,在传统的计算模式下,压榨GPU的计算能力一直是重点。 NV系列的显卡在这方面走的比较快,CUDA框架已经普及到了高性能计算的各个方面,比如Google的TensorFlow深度学习框架,默认内置了支持CUDA的GPU计算。 AMD(ATI)及其它显卡在这方面似乎一直不够给力,在CUDA退出后仓促应对,使用了开放式的OPENCL架构,其中对CUDA应当说有不少的模仿。开放架构本来是一件好事,但OPENCL的发展一直不尽人意。而且为了兼容更多的显卡
俺踏月色而来
2018/06/20
2.1K0
[教程] 系列报道——PyOpenCL介绍
OpenCL一直被软件工程师诟病说很难学习,但我觉得这是不公平的。OpenCL API的通用性,导致了它比较繁琐。一旦你写了一些OpenCL代码,你就会意识到很多运行在host处理器上的 代码实际上是 boilerplate. 我会用 PyOpenCL - a neat Python module written by Andreas Klöckner. (If you are reading this Andreas, keep up the good work!) 请安装 PyOpenCL 和 NumP
GPUS Lady
2018/03/30
2.6K0
如何计算?参数量、计算量、推理速度
来源丨https://zhuanlan.zhihu.com/p/376925457
公众号机器学习与AI生成创作
2021/11/16
3.5K0
如何减少Exadata计算节点CPU的Core数量
最近为某客户做一个Exadata的PoC测试,要求是X8 1/8 rack配置,目前机器是1/4 rack的硬件。 OEDA配置时只选择了1/8 rack选项,其他都没有配置。但是在一键刷机时会发现跳过了计算节点的1/8 rack配置,只对存储节点进行了1/8 rack配置,如下:
Alfred Zhao
2021/06/10
1.3K0
OpenCL异构计算资料收集
原文 http://www.drdobbs.com/open-source/easy-opencl-with-python/240162614
流川疯
2019/01/18
7880
如何计算LSTM层中的参数数量
长短期记忆网络(通常称为“ LSTM”)是一种特殊的RNN,经过精心设计LSTM能够学习长期的依赖。正如他的名字,它可以学习长期和短期的依赖。
deephub
2022/11/11
2.4K0
如何计算LSTM层中的参数数量
如何成为一名异构并行计算工程师
作者 | 刘文志 责编 | 何永灿 随着深度学习(人工智能)的火热,异构并行计算越来越受到业界的重视。从开始谈深度学习必谈GPU,到谈深度学习必谈计算力。计算力不但和具体的硬件有关,且和能够发挥硬件能力的人所拥有的水平(即异构并行计算能力)高低有关。 一个简单的比喻是:两个芯片计算力分别是10T和 20T,某人的异构并行计算能力为0.8,他拿到了计算力为10T的芯片,而异构并行计算能力为0.4的人拿到了计算力为20T的芯片,而实际上最终结果两人可能相差不大。异构并行计算能力强的人能够更好地发挥硬件的能力,而
用户1737318
2018/06/05
2.8K0
OpenCL超级计算研讨会总结
2015元宵隔天,也是北京两会热烈提案期间,由美商AMD、港商蓝宝石科技、景丰电子于深圳北方大厦举办“GPU/OpenCL并行计算大趋势”研讨会,吸引近百位来自北京、天津、上海、南京以及深圳当地商业单位之技术人员、部门主管参与,其中AMD资深软件经理陆璐博士展示基于Firepro高性能GPU计算卡的OpenCL/DNN(深度学习)技术与方案,成为众人最关注的焦点,此外吉浦迅科技CEO陈泳翰受邀介绍GPU并行计算的性价比、节能等特色,以及OpenCL+OpenACC异构并行编程模型,也是商业单位极
GPUS Lady
2018/03/30
8160
为什么junit单元测试会关闭非守护进程
在网上有不少人发现了这个问题,却没有说明这个问题背后的故事,今天笔者就从源头把这个问题解释下,先把demo程序中用到的两个类代码贴出来:
johnhuster的分享
2022/03/28
3740
异构计算综述
异构计算(Heterogeneous computing)技术从80年代中期产生,由于它能经济有效地获取高性能计算能力、可扩展性好、计算资源利用率高、发展潜力巨大,目前已成为并行/分布计算领域中的研究热点之一。本文主要介绍了CPU+GPU基础知识及其异构系统体系结构(CUDA)和基于OpenCL的异构系统,并且总结了两种结构的特点,从而对异构计算有了更深的理解。
碎碎思
2022/01/10
3.8K0
异构计算综述
linux 根据进程名统计进程数量
pgrep -x $proc :完全匹配进程名 ps -o cmd -p: 根据pid, 列出command列  grep -v ^CMD$;排除 CMD开头和结尾的行 cut -d ' ' -f2-: 裁剪出以空格未分割符的第二列开始到最后的内容 grep -c $proc: 统计进程名数量 统计命令: pgrep -x $proc|xargs ps -o cmd -p|grep -v ^CMD$| cut -d ' ' -f2-|grep -c $proc 例子: [root@wangzi ~]# p
葫芦
2019/04/17
4.8K0
Mathematica 的并行计算
本文译自:https://blog.wolfram.com/2009/03/18/the-evolution-of-parallel-computing-with-mathematica/ 在 80 年代,我参加了一个科学演讲,是关于一种相当麻烦的方法来并行化当时存在的一个符号计算系统,我很快意识到我可以更优雅地为Mathematica带来并行性,这要归功于它的符号通信协议MathLink。这个协议让我不仅可以在同时运行的Mathematica内核之间交换数据,还可以交换程序。
WolframChina
2021/12/02
2K0
Mathematica 的并行计算
何去何从的并行计算
👆点击“博文视点Broadview”,获取更多书讯 也许你正试图将你的应用改造成并行模式运行,也许你只是单纯地对并行程序感兴趣。 无论出于何种原因,你正对并行计算充满好奇、疑问和求知欲。 不过首先,要公布一条令人沮丧的消息。 就在大伙儿都认为并行计算必然成为未来的大趋势时,2014年年底,在Avoiding ping pong论坛上,伟大的Linus Torvalds提出了一个截然不同的观点,他说:“忘掉那该死的并行吧!”(原文:Give it up. The whole "parallel comput
博文视点Broadview
2022/08/26
5320
何去何从的并行计算
找出端口号占用进程
平时用得少,作个备忘。 windows: netstat -ano | findstr "端口号" 得到进程pid tasklist | findstr "pid号" 就能找到具体进程了。 ---- linux: 查看端口被哪些进程监听 lsof -i :端口号 查看具体占用的进程 netstat -tunlp|grep 端口号
槽痞
2020/06/23
1.3K0
如何评价微软在数据中心使用FPGA代替传统CPU的做法?
编者按:本文系微软亚洲研究院实习生李博杰在知乎上针对“如何评价微软在数据中心使用FPGA代替传统CPU的做法?”问题的回答。AI科技评论已获得转载授权。 首先,原问题「用 FPGA 代替 CPU」中,这个「代替」的说法不准确。我们并不是不用 CPU 了,而是用 FPGA 加速适合它的计算任务,其他任务仍然在 CPU 上完成,让 FPGA 和 CPU 协同工作。 本文将涵盖三个问题: 为什么使用 FPGA,相比 CPU、GPU、ASIC(专用芯片)有什么特点? 微软的 FPGA 部署在哪里?FPGA 之间、
AI科技评论
2018/03/09
2.4K0
如何评价微软在数据中心使用FPGA代替传统CPU的做法?
深度 | 如何评价微软在数据中心使用 FPGA ?
AI 科技评论按:本文作者李博杰,本文整理自知乎问题《如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?》下的回答,AI 科技评论授权转载。
网络交换FPGA
2019/10/29
6770
深度 | 如何评价微软在数据中心使用 FPGA ?
并行计算简介_并行计算实验报告
并行计算机: 通常来讲,从 硬件 的角度来讲,当前所有的单机都可以被认为是并行的:
全栈程序员站长
2022/09/20
8070

相似问题

用OpenCl编写PyOpenCl内核

12

如何使用INDE代替OpenCL SDK安装pyopencl?

21

OpenCL计算单元信息

12

如何改变并行进程的数量?

21

OpenCL :计算单元数

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文