Java:我是否过度简化了代码?

Java:我是否过度简化了代码?,java,Java,这是我创建的一个玩具示例问题。我有一门IP课程。我想创建一个IP的arraylist,如下所示,但没有成功 class IP{ private long d; public IP(long d){ this.d = d; } } class something{ public void some_method(){ HashMap<IP, ArrayList<IP>> ip_map = new

这是我创建的一个玩具示例问题。我有一门IP课程。我想创建一个IP的arraylist,如下所示,但没有成功

class IP{
     private long d;
     public IP(long d){
          this.d = d;
     }
}

class something{
     public void some_method(){
         HashMap<IP, ArrayList<IP>> ip_map = new HashMap<IP,ArrayList<IP>>();
         ......
         IP ip_key = new IP(1);
         IP ip2 = new IP(2);
         IP ip3 = new IP(3);
         // this is the line that always goes wrong
         ip_map.put(ip_key, new ArrayList<IP>(ip2)) ;
         ip_map.get(ip_key).add(ip3);
     }
}
这总是失败的。错误消息是:

error: no suitable constructor found for ArrayList(IP)
                ip_map.put(ip_key, new ArrayList<IP>(ip2));
                                   ^
    constructor ArrayList.ArrayList(int) is not applicable
      (argument mismatch; IP cannot be converted to int)
    constructor ArrayList.ArrayList() is not applicable
      (actual and formal argument lists differ in length)
    constructor ArrayList.ArrayList(Collection<? extends Vertex>) is not applicable
      (argument mismatch; IP cannot be converted to Collection<? extends IP>)
1 error
是不是因为我的IP类没有实现集合接口?我想知道这是否真的不可行:ip_map.putip_key,new arraylistp2

更新:我知道我可以通过

ArrayList<IP> ip_list = new ArrayList<IP>();
ip_list.add(ip2);
ip_map.put(ip_key, ip_list);
但是我想知道,由于代码减少,是否有可能像下面这样做

ip_map.put(ip_key, new ArrayList<IP>(ip2)) ; 

您打算如何处理新的ArrayListP2?如果要创建一个包含ip2的列表,需要实例化该列表,然后添加它。比如:

List<IP> list = new ArrayList<IP>();
list.add(ip2)

您打算如何处理新的ArrayListP2?如果要创建一个包含ip2的列表,需要实例化该列表,然后添加它。比如:

List<IP> list = new ArrayList<IP>();
list.add(ip2)

集合构造函数不支持单个元素或数组,因为它们在API意义上不是集合。您可以传递一个集合以初始填充新集合,也可以传递一个数字以指示内部分配的初始容量


如果您希望使用单个元素高效地表示不可修改的集合,请查看collections.singletonT、collections.singletonListT或collections.singletonMapK,V.

集合构造函数不支持单个元素或数组,因为它们在API意义上不是集合。您可以传递一个集合以初始填充新集合,也可以传递一个数字以指示内部分配的初始容量


如果您希望使用单个元素高效地表示不可修改的集合,请查看collections.singletonT、collections.singletonListT或collections.singletonMapK,V.

是。确切地我知道我可以用你的方式做。但我想简化我的代码。我添加了一种方法,您可以这样做,但在我看来这是不必要的。通常的两行方式更易于阅读是的。确切地我知道我可以用你的方式做。但我想简化我的代码。我添加了一种方法,您可以这样做,但在我看来这是不必要的。通常的两行方式更具可读性