Java ArrayList,每个对象一次只能存在于一个ArrayList中
我有两个简单的类,NetworkDevice.java和Channel.java 在Channel.java中,我有Java ArrayList,每个对象一次只能存在于一个ArrayList中,java,Java,我有两个简单的类,NetworkDevice.java和Channel.java 在Channel.java中,我有 private ArrayList<Channel> channel = new ArrayList<Channel>(); Channel.java如下所示 public class NetworkDevice { // Fields private String address; //Constructor
private ArrayList<Channel> channel = new ArrayList<Channel>();
Channel.java如下所示
public class NetworkDevice {
// Fields
private String address;
//Constructor
public NetworkDevice(String address, Channel channel){
this.address = address;
addToChannel(channel);
}
// Add a NetworkDevice to the
public void addToChannel(Channel channel){
channel.addChannel(this);
}
}
import java.util.List;
import java.util.ArrayList;
public class Channel {
// Fields
private ArrayList<Channel> channel = new ArrayList<Channel>();
private int number;
private List<Packet> packet;
/*
* Constructor
* Initializes the number of the the Channel
* Allows for a packet to be passed in
*/
public Channel(int number, Packet packets) {
this.number = number;
packet.add(packets);
}
/*
* Adds to the Channel array
* @Param a network device object
*/
public void addChannel(NetworkDevice device) {
channel.add(this);
}
}
import java.util.List;
导入java.util.ArrayList;
公共类频道{
//田地
专用ArrayList通道=新建ArrayList();
私有整数;
私有列表包;
/*
*建造师
*初始化通道的编号
*允许传入数据包
*/
公共信道(整数、数据包){
这个数字=数字;
packet.add(包);
}
/*
*添加到通道阵列
*@Param a网络设备对象
*/
公共无效添加通道(网络设备){
频道。添加(此);
}
}
看起来你把很多名字和概念搞乱了
我重写了一点代码,这样对我来说才有意义。也就是说,在我看来,没有任何真正的线索可以实现什么。但看看我的代码会带来什么结果:
public class MultiInst {
static public class NetworkDevice {
private final String mAddress;
private Channel mCurrentChannel = null;
public NetworkDevice(final String address, final Channel channel) {
this.mAddress = address;
addToChannel(channel);
}
public void addToChannel(final Channel channel) {
if (mCurrentChannel == channel) return; // may do this
if (mCurrentChannel != channel && mCurrentChannel != null) mCurrentChannel.removeNetworkDevice(this);
mCurrentChannel = channel;
mCurrentChannel.addNetworkDevice(this);
}
@Override public String toString() {
return mAddress;
}
}
static public class Channel {
private final ArrayList<NetworkDevice> mNetworkDevices = new ArrayList<>();
private final List<Packet> mPackets = new ArrayList<>();
private final int mNumber;
public Channel(final int number, final Packet... packets) {
this.mNumber = number;
if (packets != null) for (final Packet p : packets) {
mPackets.add(p);
}
}
public void addNetworkDevice(final NetworkDevice device) {
mNetworkDevices.add(device);
}
public void removeNetworkDevice(final NetworkDevice device) {
mNetworkDevices.remove(device);
}
@Override public String toString() {
String acc = "Channel #" + mNumber + ":\t";
if (mNetworkDevices.size() < 1) return acc + " [EMPTY] ";
for (final NetworkDevice c : mNetworkDevices) {
acc += "\t" + c;
}
return acc;
}
}
public static void main(final String[] args) {
final Channel c1 = new Channel(1);
final Channel c2 = new Channel(2);
final NetworkDevice d = new NetworkDevice("lol", null);
System.out.println("Start\n");
System.out.println(c1);
System.out.println(c2);
System.out.println();
System.out.println("Adding to channel 1...");
d.addToChannel(c1);
System.out.println(c1);
System.out.println(c2);
System.out.println();
System.out.println("Adding to channel 2...");
d.addToChannel(c2);
System.out.println(c1);
System.out.println(c2);
System.out.println();
System.out.println("End");
}
}
问题是什么?将连接的通道放入网络设备是一种选择吗?作为
可选的频道可以解决这个问题。这是如何工作的?问题是技术规格addChannel(网络设备)
到底在做什么?您不使用设备
,而是将“此”频道添加到频道列表中。。。
Start
Channel #1: [EMPTY]
Channel #2: [EMPTY]
Adding to channel 1...
Channel #1: lol
Channel #2: [EMPTY]
Adding to channel 2...
Channel #1: [EMPTY]
Channel #2: lol
End