Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:是否替换ArrayList中不允许的ArrayList cos基元类型?_Java_Arraylist_Primitive Types - Fatal编程技术网

Java:是否替换ArrayList中不允许的ArrayList cos基元类型?

Java:是否替换ArrayList中不允许的ArrayList cos基元类型?,java,arraylist,primitive-types,Java,Arraylist,Primitive Types,ArrayList中不允许使用基元类型。部分解决方案:您可以将prim.types(如int)包装为Integer,以形成一个额外的类,但会产生副作用。我想索引数据,是否有一些替代品可以替代ArrayList来允许基元类型 是否有允许基元类型的ArrayList的替代品 不幸的是没有。Java中的泛型不支持使用基元类型参数。类型参数必须是类 必须使用其中一个包装器类,例如Integer,以便包含最初存储在基元类型中的值 是否有允许基元类型的ArrayList的替代品 不幸的是没有。Java中的泛

ArrayList中不允许使用基元类型。部分解决方案:您可以将prim.types(如int)包装为Integer,以形成一个额外的类,但会产生副作用。我想索引数据,是否有一些替代品可以替代ArrayList来允许基元类型

是否有允许基元类型的ArrayList的替代品

不幸的是没有。Java中的泛型不支持使用基元类型参数。类型参数必须是类

必须使用其中一个包装器类,例如Integer,以便包含最初存储在基元类型中的值

是否有允许基元类型的ArrayList的替代品

不幸的是没有。Java中的泛型不支持使用基元类型参数。类型参数必须是类


必须使用其中一个包装类,例如Integer,才能包含最初存储在基元类型中的值。

是,编写自己的实现。java.util.ArrayList中有一个对象[]。你写你的原始数组列表,比如

具有int[]的MyIntArrayList

具有浮点[]的MyFloatArrayList

等等,


实际上,您可以复制ArrayList的整个JFC实现,并将对象[]更改为基元数组。当然,您希望删除所有泛型和许多复杂的/泛型检查,但核心逻辑保持不变,如阵列复制、阵列大小增长等。

是,编写您自己的实现。java.util.ArrayList中有一个对象[]。你写你的原始数组列表,比如

具有int[]的MyIntArrayList

具有浮点[]的MyFloatArrayList

等等,


实际上,您可以复制ArrayList的整个JFC实现,并将对象[]更改为基元数组。当然,您可能希望删除所有泛型和许多复杂的/泛型检查,但核心逻辑保持不变,如数组复制、数组大小增长等,

Java中的泛型以及集合框架都对对象而不是原语进行操作。我很好奇为什么使用像Long和Integer这样的对象版本不足以满足您的需要。这是因为性能问题吗?

Java中的泛型以及集合框架都对对象而不是原语进行操作。我很好奇为什么使用像Long和Integer这样的对象版本不足以满足您的需要。这是因为性能问题吗?

您使用的是什么版本的Java

因为1.5自动装箱使这个问题变得毫无意义

您可以这样做:

List<Integer> x = Arrays.asList(1, 2, 3);

x.get(0) == 1;  // this is true  **WARNING** comments have pointed out this only works for Integers -128 to 127 due to integer caching.  Use .equals

int foo = x.get(1);  // this doesn't need a cast

x.add(4);  // this doesn't need to be wrapped

您使用的是什么版本的Java

因为1.5自动装箱使这个问题变得毫无意义

您可以这样做:

List<Integer> x = Arrays.asList(1, 2, 3);

x.get(0) == 1;  // this is true  **WARNING** comments have pointed out this only works for Integers -128 to 127 due to integer caching.  Use .equals

int foo = x.get(1);  // this doesn't need a cast

x.add(4);  // this doesn't need to be wrapped

没有一种数据结构能够完全满足您的要求。您反对使用诸如Character或Integer之类的包装类有什么原因吗?当然,如果您只是想以一种高效的方式对数据进行索引,您可以始终使用基本数组,如int[]


您也可以使用第三方库,请参阅:

没有完全按照您的要求执行的数据结构。您反对使用诸如Character或Integer之类的包装类有什么原因吗?当然,如果您只是想以一种高效的方式对数据进行索引,您可以始终使用基本数组,如int[]


您还可以使用第三方库,请参阅:

如果您使用的是Java>1.5,您可以使用自动装箱,所有这些都可以正常工作。在其他情况下,您可以使用中的类,如

如果您使用的是Java>1.5,您可以只使用自动装箱,所有这些都可以正常工作。在其他情况下,您可以使用中的类,例如它不直接支持原语,但由于

工作样本:

import java.util.List;
import java.util.ArrayList;

public class TestInt {
    public static void main( String [] args ) {

        List<Integer> index = new ArrayList<Integer>();

        index.add(100);
        index.add(200);
        index.add(300);

        boolean b;

        b = index.contains(100); 
        System.out.println( b );// prints true 

        b = index.contains(60);
        System.out.println( b );// prints false.
    }
}
所以你不需要一个替代品


但如果您仍然坚持使用:但请参见Pyrolistical warning,它不直接支持原语,但由于

工作样本:

import java.util.List;
import java.util.ArrayList;

public class TestInt {
    public static void main( String [] args ) {

        List<Integer> index = new ArrayList<Integer>();

        index.add(100);
        index.add(200);
        index.add(300);

        boolean b;

        b = index.contains(100); 
        System.out.println( b );// prints true 

        b = index.contains(60);
        System.out.println( b );// prints false.
    }
}
所以你不需要一个替代品


但是如果您仍然坚持可以使用:但是请参阅Pyrolistical warning

如果您不局限于特定的实现,例如ArrayList,您可能会发现它是有用的


它有所有基本java集合的实现,但其中包含基本数据类型。

如果您不局限于特定的实现,例如ArrayList,您可能会发现它是有用的


它有所有基本java集合的实现,但其中包含基本数据类型。

例如使用由提供的集合。它们对所有基本类型都有专门的实现。特别是对于这些基本类型,它们比Java类型快得多,主要是因为它们不需要装箱和拆箱,并且使用更少的内存。它们对所有基本类型都有专门的实现。特别是对于

se基元类型,它们比Java基元类型快得多,主要是因为它们不需要装箱和拆箱,并且使用更少的内存。

假设OP使用的是Java的现代版本,这确实是唯一必要的答案。使用1.5,您能给出一个工作示例吗?因此,对于列表中的整数,您有一个类Integer{int i;}?@HH否,Integer包装器已经存在:java.lang.Integer这里有一个简单的工作示例:@pyrolistic:使用x.get0是自找麻烦。例如,Arrays.asList1,1,2;x、 get0==x.get1将工作,因为缓存了内部整数,但是Arrays.asList1000,1000,2;x、 get0==x.get1将返回false,因为这两个整数是不同的实例。另外,x.remove 1非常模糊。。。删除元素1或等于值1的元素?@Trevor我把它变成了一个问题,假设OP使用的是Java的现代版本,这确实是唯一必要的答案。使用1.5,你能给出一个工作示例吗?因此,对于列表中的整数,您有一个类Integer{int i;}?@HH否,Integer包装器已经存在:java.lang.Integer这里有一个简单的工作示例:@pyrolistic:使用x.get0是自找麻烦。例如,Arrays.asList1,1,2;x、 get0==x.get1将工作,因为缓存了内部整数,但是Arrays.asList1000,1000,2;x、 get0==x.get1将返回false,因为这两个整数是不同的实例。另外,x.remove 1非常模糊。。。删除元素1,或者等于值1的元素?@Trevor我提出了一个问题,我会避免让人们知道commons原语。这是一个只有专家才应该使用的有效Java解决方案。它是一个第三方库,因此公共类库不是为它而设计的,您正在为代码读者引入更多的概念开销。第二,人们倾向于认为天哪,这是更快的,所以我只会使用这个!他们过早地进行了优化,最快的事情通常是对最简单的事情进行优化。代码不是让计算机快速运行的,代码是让人类阅读和理解的。使用标准库,谁知道将来JVM可能会突然提高集合性能。但是如果你使用第三方库,你就不会得到它。。。我认为它在1.5之前就有它的位置,但现在我不知怎么地变得过时了。。。它仍然有一些有用的特性。我不会说它只针对专家,但绝对不会针对新手,否则我们根本不会使用任何库。然而,你的解释很有道理。我会避免让人们知道commons原语。这是一个只有专家才应该使用的有效Java解决方案。它是一个第三方库,因此公共类库不是为它而设计的,您正在为代码读者引入更多的概念开销。第二,人们倾向于认为天哪,这是更快的,所以我只会使用这个!他们过早地进行了优化,最快的事情通常是对最简单的事情进行优化。代码不是让计算机快速运行的,代码是让人类阅读和理解的。使用标准库,谁知道将来JVM可能会突然提高集合性能。但是如果你使用第三方库,你就不会得到它。。。我认为它在1.5之前就有它的位置,但现在我不知怎么地变得过时了。。。它仍然有一些有用的特性。我不会说它只针对专家,但绝对不会针对新手,否则我们根本不会使用任何库。然而,您的解释是非常正确的。一个副作用是包装器类可以为null。我不确定这是如何用自动装箱来解释的,所以请确保它没有用toString给出一个数值。我不确定这是如何用自动装箱来解释的,所以请确保它没有用toString给出一个数值。