java - 如何迭代类类型的数组列表

标签 java arraylist iteration

我有两个类A和B。我想从B访问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 这是我到目前为止所写的。我面临的问题:正在生成重复项,并且散列映射条目不连续,我的意思是像索引 0,1,2.. 相反,很少有位置是空的。因此,如果我将非常大的文件作为程序的输入,它会抛出一个indexoutofboundsException。我是一个初学者,正在尽我最大的努力。请帮忙。

最佳答案

您可以使用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 )
    ...
  }    
}

关于java - 如何迭代类类型的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157532/

相关文章:

java - Java 字符串中正斜杠 ('\u002f' ) 的编码

java - SimpleNLG - 是否可以让 SimpleNLG 自动检测名词是单数还是复数?

java - 数组列表<文件> 到数组文件[]

java - 泛型究竟是如何工作的?

list - 从 For 语句向 Flutter 中的列表添加元素?

javascript - @PublishEvent、ajax 和传递数据

java - JavaFX 中的隐形舞台/场景

java - Android ArrayList 的 IndexOutOfBoundsException

c++ - C++ Newton Raphson方法比对分慢吗?

javascript - 通过对象 JavaScript 迭代