Java中如何为循环创建的每个新ArrayList生成自定义名称?
如何为循环创建的ArrayList实例生成唯一标识(模拟“唯一名称”)
嘿,我懂你想给每个循环生成的ArrayList弄个专属“唯一名称”的需求——不过得先明确一个关键点:Java作为静态类型语言,没法在运行时动态生成新的变量名,因为变量名是编译阶段就固定死的。不过咱们可以换个更实用的思路,用容器来管理这些ArrayList,给每个实例绑定一个唯一标识,效果和你想要的“唯一名称”一模一样~
最常用的解决方案:用Map存储,关联唯一名称
我们可以用Map<String, ArrayList<SellAbleItems>>来保存所有的ArrayList实例:其中键(Key)就是你想要的“唯一名称”,值(Value)就是对应的ArrayList对象。这样既能给每个实例标注唯一标识,又能随时通过名称找到对应的实例。
示例1:用递增序号生成唯一名称
这种方式适合需要按顺序命名的场景,比如order_1、order_2:
// 初始化一个Map来存放所有订单 Map<String, ArrayList<SellAbleItems>> allOrders = new HashMap<>(); // 计数器,用来生成递增的序号 int orderNumber = 1; // 模拟循环创建多个订单 for (int i = 0; i < 3; i++) { // 创建新的ArrayList实例 ArrayList<SellAbleItems> newOrder = new ArrayList<>(); // 往订单里添加商品(这里用你提供的SellAbleItem类示例) newOrder.add(new Brunch("Vodka", 99)); newOrder.add(new Brunch("Brunch", 199)); // 生成唯一名称 String uniqueName = "order_" + orderNumber++; // 把订单和名称绑定存入Map allOrders.put(uniqueName, newOrder); } // 之后要使用某个订单时,直接通过名称获取 ArrayList<SellAbleItems> targetOrder = allOrders.get("order_2");
示例2:用UUID生成随机唯一名称
如果需要完全不重复的随机名称(比如避免序号冲突的场景),可以用UUID生成:
// 同样用Map存储 Map<String, ArrayList<SellAbleItems>> allOrders = new HashMap<>(); for (int i = 0; i < 3; i++) { ArrayList<SellAbleItems> newOrder = new ArrayList<>(); newOrder.add(new Brunch("Vodka", 99)); newOrder.add(new Brunch("Brunch", 199)); // 生成随机唯一的名称(截取前8位缩短长度) String uniqueName = "order_" + UUID.randomUUID().toString().substring(0, 8); allOrders.put(uniqueName, newOrder); }
替代方案:用List存储(按索引区分)
如果不需要“名称”这个字符串标识,只是需要区分多个ArrayList,直接用List<ArrayList<SellAbleItems>>存储即可,通过索引来访问不同的实例:
List<ArrayList<SellAbleItems>> allOrders = new ArrayList<>(); for (int i = 0; i < 3; i++) { ArrayList<SellAbleItems> newOrder = new ArrayList<>(); newOrder.add(new Brunch("Vodka", 99)); newOrder.add(new Brunch("Brunch", 199)); allOrders.add(newOrder); } // 通过索引获取第2个订单(索引从0开始) ArrayList<SellAbleItems> secondOrder = allOrders.get(1);
为什么不能动态生成变量名?
再啰嗦一句:Java的变量名是编译时确定的,运行时程序没法凭空创建一个新的变量名来引用对象。而用Map或List的方式,本质是给每个ArrayList实例分配了一个唯一的“访问标识”,完全能满足你想要的“每个实例有唯一名称”的需求,而且是Java里最合规的实现方式。
内容的提问来源于stack exchange,提问作者Peter Holdensgaard
相关产品推荐
相关产品推荐

