java - 获取Java嵌套ArrayList中的元素个数

标签 java android arraylist

我正在尝试扫描 Android wifi 网络并将它们存储在数组列表中。我的目标如下。

1.扫描wifi网络并将它们存储在一个ScanObject的ArrayList中

private List<ScanResult> results; // A list of ScanResult is given by system
private ArrayList<ScanObject> scanObjectList = new ArrayList<ScanObject>;

for(int i=0;i<results.size();i++){
         String mac = results.get(i).BSSID;
         int rssi = results.get(i).level;
         scanObject = new ScanObject(mac,rssi);
         scanObjectList.add(i,scanObject);
}

2.将ScanObject的ArrayList与系统时间一起存储到ScanInfo对象中

    long systemTime = System.currentTimeMillis();
    scanInfo = new ScanInfo(systemTime,scanObjectList);

3.将ScanInfo对象添加到ScanInfo对象的ArrayList中

private ArrayList<ScanInfo> listOfScanInfoObjects = new ArrayList<ScanInfo>();
listOfScanInfoObjects.add(scanInfo);

当我尝试显示 listOfScanInfoObjects 中的对象时,我只能显示我只看到最后一次扫描。例如,如果我执行以下操作,经过几次扫描后,我只会看到最后一个对象中的元素数。所有其他人都给我零值(value)。我想了解我在这里做错了什么。

for(int q=0;q<listOfScanInfoObjects.size();q++) {
    System.out.println("SIZE: "+listOfScanInfoObjects.get(q).getScanObjects().size());
}

我的ScanObject类如下;

public class ScanObject {
private String BSSID; // MAC address of the AP
private int RSSI; // RSSI value in dBm

public ScanObject(String mac, int rssi) {
    setBSSID(mac);
    setRSSI(rssi);
    }
// setter methods
    public void setBSSID(String mac){
        this.BSSID = mac;
    }
    public void setRSSI(int rssi){
        this.RSSI = rssi;
    }
// getter methods
    public String getBSSID(){
        return this.BSSID;
   }
   public int getRSSI(){
        return this.RSSI;
   }
}

我的ScanInfo类如下;

public class ScanInfo {
   private long timeStamp;
   private ArrayList<ScanObject> scanObjectList;

   public ScanInfo(long time, ArrayList<ScanObject> scanList) {
      setTimeSamp(time);
      setScanObjects(scanList);
    }
   // setter methods
   public void setTimeSamp(long time){
      this.timeStamp = time;
   }
   public void setScanObjects(ArrayList<ScanObject> scanList){
      scanObjectList = new ArrayList<ScanObject>();
      this.scanObjectList = scanList;
   }

   // getter methods
   public long getTimeStamp(){
       return this.timeStamp;
   }
   public ArrayList<ScanObject> getScanObjects(){
       return this.scanObjectList;
   }
}

整体代码如下。

public void main(){
  processRawResult();
  listOfScanInfoObjects.add(index,scanInfo);
  for(int q=0;q<listOfScanInfoObjects.size();q++) {
System.out.println("SIZE:"+listOfScanInfoObjects.get(q).getScanObjects().size());
        }

  scanObjectList.clear();
  index++;
}

// process results object
public void processRawResult(){
    long systemTime = System.currentTimeMillis();
    scanObjectList = new ArrayList<ScanObject>();
    for(int i=0;i<results.size();i++){
         String mac = results.get(i).BSSID;
         int rssi = results.get(i).level;
         scanObject = new ScanObject(mac,rssi);
         scanObjectList.add(i,scanObject);
    }
    scanInfo = new ScanInfo(systemTime,scanObjectList);
}

提前致谢。

最佳答案

@哈萨拉

 public void setScanObjects(ArrayList<ScanObject> scanList){
      scanObjectList = new ArrayList<ScanObject>();
      this.scanObjectList = scanList;
   }

此处您引用的是已通过的列表。因此,当您清除列表时,scanObjectList 中的所有数据都会清除 ScanInfo 列表中包含的数据,因为两者相同。

public void main(){
    final ScanInfo scanInfo = processRawResult();
    listOfScanInfoObjects.add(scanInfo);
    for(int q=0;q<listOfScanInfoObjects.size();q++) {
         System.out.println("SIZE:"+ listOfScanInfoObjects.get(q).getScanObjects().size());
     }

  scanObjectList.clear();
  index++;
}

所以在 setScanObjects(ArrayList scanList) 方法中使用 this.scanObjectList.addAll(scanList); 而不是 this.scanObjectList = scanList;

关于java - 获取Java嵌套ArrayList中的元素个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934485/

相关文章:

java - 在 Android SDK 中导入文本文件

android - 长时间运行的 IPC 服务的电池节省策略

android - 如何从 ext-sdcard 查询音乐?

java - 游戏中发送电子邮件异常! 2

java - Java中存储KeyStore : empty file and unable to reload

java - 放大URL图像尺寸

java - Java中如何将一个文件导入到多个ArrayList中?

java - 对 ArrayList 中 Collection.contains 方法的可疑调用

java - 使用 ArrayList 填充 ListView?

java - 将受限站点添加到 Windows Internet 选项