java中创建List<>类型的数组-20171028

本文介绍了一种利用HashMap来模拟List类型数组的方法。通过这种方式,可以有效地解决Java中不能直接创建泛型数组的问题。文中提供了具体的实现代码及调用方式。

 

遇到了一个问题需要创建List类型的数组,但是在网上查了很多资料,好像发现并不能创建泛型的数组,于是改用Hashmap实现同等的功能。

代码如下:
Map<String,List<AddList>>map=new

HashMap<String,List<AddList>>();

for(int i=0;i<N;i++)
{
List<AddList> list=new ArrayList<AddList>();
map.put("list"+i,list);
}
这样就构造出N个名字名字分别为list0,list1……直到listN的List<Addlist>型的数组。
至于调用,直接使用map.get("list"+m)就可以得到名称为listm的List了。

转载于:https://www.cnblogs.com/lbrs/p/8856477.html

<think>好的,用户现在想了解Java中泛型自定义数组与使用<>定义数组的区别。首先,我需要明确这两个概念的具体含义,可能用户对泛型数组的使用和语法存在疑惑。 首先,泛型在Java中不能直接用于数组创建,因为类型擦除会导致运行时类型信息丢失,而数组需要在创建时明确知道组件类型。因此,使用new T[size]这样的方式是不允许的,通常会通过强制类型转换或使用反射来绕过这个限制。例如,用户可能想创建一个泛型数组,但必须通过强制转换,如(T[]) new Object[size],但这会有未经检查的警告。 接下来,用户提到的“<>定义数组”可能是指使用菱形操作符(diamond operator)在初始化时让编译器推断类型,比如List<String> list = new ArrayList<>();。但这里讨论的是数组,所以可能用户指的是像List<String>[]这样的泛型数组,而Java不允许直接创建泛型数组,因为类型擦除会导致类型不安全。这种情况下,只能用@SuppressWarnings来抑制警告,或者使用通配符类型,但这样会限制数组的使用方式。 所以,主要的区别在于语法限制和类型安全。泛型自定义数组需要开发者处理类型擦除带来的问题,可能使用反射或者强制转换,但存在运行时风险。而使用<>定义的数组(实际上可能指泛型数组的声明)在Java中不被允许,只能通过通配符或其他变通方法,但同样会有类型安全问题。 需要给出具体的代码示例来展示这两种情况的不同处理方式。比如,自定义泛型数组类中的数组创建方式,以及尝试声明泛型数组时的错误。同时,要解释Java类型擦除机制如何影响这两种情况,以及为什么Java不允许直接创建泛型数组,以避免潜在的运行时异常。 最后,相关问题需要围绕泛型、数组的限制、类型擦除和解决方案展开,帮助用户进一步理解相关概念。</think><< 泛型自定义数组与<>定义数组的主要区别在于类型安全性和语法限制。以下是具体分析及示例代码: 1. **泛型自定义数组的实现方式**: ```java class GenericArray<T> { private T[] array; @SuppressWarnings("unchecked") public GenericArray(int size) { // 必须通过强制类型转换创建泛型数组 array = (T[]) new Object[size]; } public void set(int index, T value) { array[index] = value; } public T get(int index) { return array[index]; } } ``` **原因**:Java不允许直接实例化泛型数组(如`new T[size]`),因为类型擦除会导致运行时类型信息丢失。必须通过强制转换Object数组实现,但会产生未经检查的警告。 2. **<>定义数组的限制**: ```java // 以下代码无法通过编译 List<String>[] arrayOfLists = new ArrayList<String>[10]; // 编译错误 // 合法但存在警告的写法 @SuppressWarnings("unchecked") List<String>[] array = new ArrayList[10]; ``` **原因**:Java规范禁止创建参数化类型数组(如`List<String>[]`),因为泛型类型在运行时会被擦除,可能导致类型不安全操作。唯一的合法写法是使用原始类型数组并添加警告抑制。 **关键区别**: - 泛型自定义数组通过类型转换绕过限制 - <>语法定义数组被语言规范明确禁止 - 泛型数组存在类型擦除带来的潜在风险 - 自定义数组需要开发者自行管理类型安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值