如何遍历类类型的数组列表

时间:2013-06-17 21:56:20

标签: java arraylist iteration

我有两个类A和B.我想从A中访问A中的数组列表。数组列表是C类型,它存储对象(数据包)。我想知道是否有任何方法可以遍历列表并从每个数据包中获取特定数据。

public class PcapStream
{
  PcapParser objPcapParser = new PcapParser();
  PcapDef numPackets = new PcapDef();
  int listSize = numPackets.getMaxPackets();

  public void findStream()
  {
    final ListIterator<PcapDef> packetIterator = objPcapParser.packet_list.listIterator();
    while(packetIterator.hasNext())
    {
      for(final int i=0; i<=listSize;i++)
      {

我从这样的事情开始。不确定它是如何工作的。 B类是PcapStream,A类是PcapParser,C类是PcapDef

ListIterator packetIterator = objPcapParser.packet_list.listIterator();
    while(packetIterator.hasNext())
    {
      for(int i=0; i<listSize; i++ )
      {
        PcapDef packet1 = (PcapDef) packetIterator.next();
        PcapDef packet2 = packetIterator; //here I would like to get the 2nd object from the list, not sure how to get that at this point.
      }
}
public int compare(final PcapDef packet1, final PcapDef packet2)
  {

   return 0; 
  }

我还在努力。在这一点上,这就是我所拥有的

    public void findStream()
      {
          try
          {
            for(int i=0;i<listSize;i++)
            {
              final List <PcapDef> list = new ArrayList<PcapDef>();
              final PcapDef packet1 = objPcapParser.packet_list.get(i);
              checkPackets(packet1, list, i);
            }
          }
          catch(final IndexOutOfBoundsException e)
          {
            System.out.println("Exception : " + e);
          }
        final Set packetSet = Stream.entrySet();
        final Iterator setIterator = packetSet.iterator();
        while(setIterator.hasNext())
        {
          final Map.Entry packetEntry = (Map.Entry) setIterator.next();
          System.out.print(packetEntry.getKey() + ": ");
          System.out.println(packetEntry.getValue());
        }
      }

      private void checkPackets(final PcapDef packet1, final List<PcapDef> list, final int i)
      {
        for(int j=1;j<listSize && j!=i;j++)
        {
          final PcapDef packet2 = objPcapParser.packet_list.get(j);
          final int value = compare(packet1,packet2);
          if(value == 0)
          {
            list.add(packet1);
list.add(packet2);
            checkPackets(packet2, list, i);
          }
          else
          {
            Stream.put(i,list); //add list to hashmap
          }
        }

      }

      @Override
      public int compare(final PcapDef packet1, final PcapDef packet2)
      {
        final String header1 = packet1.getHeader();
        final String header2 = packet2.getHeader();
        final String src_port1 = packet1.getSrc_port();
        final String dst_port2 = packet2.getDst_port();
final String src_port2 = packet2.getSrc_port();
        final String dst_port1 = packet1.getDst_port();
        System.out.println(header1 + header2);
        int flag = 1;
        try{
          if(header1.equalsIgnoreCase(header2))
          {
            if((src_port1.substring(10).equalsIgnoreCase(dst_port2.substring(10))) && (src_port2.substring(10).equalsIgnoreCase(dst_port1.substring(10)) )
            {
              flag = 0;
              return flag;
            }
          }
        }

@Andy这是我到目前为止写的。我面临的问题:正在生成重复项并且hashmap条目不连续,我的意思是索引0,1,2 ..而不是几个位置是空的。因此,如果我将非常大的文件作为输入提供给我的程序,它会给我一个indexoutofboundsexception。我是初学者并且尽我所能。请帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用Iterator.next()方法获取下一个列表成员。每次调用next()都会前进到下一个列表成员。

while(packetIterator.hasNext())
{
  PCapDef packet = packetIterator.next();
  ...
}

修改

您可以使用Iterator.get(int)方法按索引获取列表成员。

while(packetIterator.hasNext())
{
  PCapDef packet = packetIterator.next();

  for(int i=0; i<listSize; i++ )
  {
    PcapDef packet2 = objPcapParser.packet_list.get( i )
    ...
  }    
}