java - 检查集合的元素是否有多个整数

标签 java loops set contain

我想更改给定图表的形式。该图的形式为用户 ID、关注者数量、关注者 1、关注者 2、..关注者 N、分隔符“---”、用户 ID 2、...等。

我必须用表单的第二个文件中的位置值替换关注者 ID1 地点 1 ID2 地点2 ....

通过匹配 ID。

因此,我想检查每次关注者id是否存在于集合中。 我的图表和我寻找关注者 ID 的集合都很大。

有没有比我下面给你的方法更有效的方法?

 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.DataInputStream;
 import java.io.FileInputStream;
 import java.io.FileWriter;
 import java.io.InputStreamReader;
 import java.util.*;


public class Changer {
public static void main(String[] args) {


       Set set = new HashSet();
       int[][] users=new int[61578415][];



                 try{
        FileInputStream fstream2 = new FileInputStream(args[0]);
        DataInputStream in2 = new DataInputStream(fstream2);
        BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
        String strLine2;


                 while ((strLine2 = br2.readLine()) != null)   {  
                    set.add(strLine2);
                 }

                 in2.close();
                 fstream2.close();}
                 catch (Exception e){
        System.err.println("Error: " + e.getMessage()+"!\n"+e.toString()+"!\n");
        e.printStackTrace();
        System.exit(-1);
           }


           try{

        FileInputStream fstream = new FileInputStream("InputGraph.txt");
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        int flag=0;
        int pos=0;


                 FileWriter fstream3 = new FileWriter("OutputGraph.txt");
        BufferedWriter out = new BufferedWriter(fstream3);


        int currentUser=0,counter=0;
        int theNum=0;
        while ((strLine = br.readLine()) != null)   {
            if(strLine.equals("---")){
                if(counter!=pos){
                    System.out.println("Error reading graph");
                    System.out.println("For:"+currentUser);
                    System.exit(-1);
                }
                flag=0;
                pos=0;
                continue;
            }

            theNum=Integer.parseInt(strLine);

            if (flag==0){

                           out.write("---"+"\n");

                           out.write(""+theNum);
                           out.write("\n");

                           currentUser=theNum;
               flag+=1;
            }
            else if (flag==1){
                counter=theNum;
                users[currentUser]=new int [counter];
                flag+=1;
                               out.write(""+theNum+"\n");
            }
            else{
                users[currentUser][pos]=theNum; 
                ++pos;

                               Iterator it = set.iterator();
                               while (it.hasNext()) {
                                 Object element = it.next();
                                 String[] arr = (String.valueOf(element)).split(" ");
                                 if (Integer.parseInt(arr[0])==theNum)
                                    {theNum=Integer.parseInt(arr[1]);break;}
                                 }


         out.write(""+theNum);
         out.write("\n");
            }
        }
        in.close();
         out.close();
    }catch (Exception e){
        System.err.println("Error: " + e.getMessage());
    }

    System.out.println("Graph has been read");
    System.gc();
    System.gc();


    System.out.println("Finished");
  }

   }

最佳答案

在内部的交集上执行for循环会更有效,这样你就不会进行太多的分割和解析:

Iterator it = set.iterator();
while (it.hasNext()) {
    Object element = it.next();
    String[] arr = (String.valueOf(element)).split(" ");
    int arr0 = Integer.parseInt(arr[0]);
    int arr1 = Integer.parseInt(arr[1]);
    for (int integer : intersection) {
       if (arr0 == integer) {
          out.write(integer + " " + arr1 + "\n");
       }
    }
}

但这会改变调用写入的顺序。

但是我怀疑您可能会从将其加载到(或只是替换为)HashMapSparseArray 中受益。很难区分你所提供的信息。

关于java - 检查集合的元素是否有多个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22809215/

相关文章:

javascript - 如何计算网格上所有可能的路径

java - 将数字保存到循环JAVA中的变量

Mysql查询排除某个条目

c++ - const set& 的问题。编译器/STL 错误或不可移植的用法?

java - 如何在逐个字符读写时同步代码块以将整个字/行写入输出文件?

java - Schedulers.newElastic 和 Schedulers.elastic 方法有什么区别?

algorithm - 无限循环 : Determining and breaking out of Infinite loop

r - 按相关列拆分 R 中的矩阵或数据集

java - Java 中的 Koblitz 方法

java - Java类如何从Entry类获取信息?