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