Java:我是否过度简化了代码?
这是我创建的一个玩具示例问题。我有一门IP课程。我想创建一个IP的arraylist,如下所示,但没有成功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
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.是。确切地我知道我可以用你的方式做。但我想简化我的代码。我添加了一种方法,您可以这样做,但在我看来这是不必要的。通常的两行方式更易于阅读是的。确切地我知道我可以用你的方式做。但我想简化我的代码。我添加了一种方法,您可以这样做,但在我看来这是不必要的。通常的两行方式更具可读性