Alex
Alex

Reputation: 49

how to create a Java List of two integers

Hello I am new to java and I am trying to create a list like

List<Int, Int> list = new List<Int, Int>();

the first int is the value and the second int is the finished time. I want to be able to read from a file and save in my list, So can I later get the finished time or value list in a sorted way. I am going to ue these two list together so when the first one is sorted the second one also needs to be sorted accordingly.

If I use HashMap I cant add duplicate values, can someone help me please? I tried with TreeMap but it also didnt work.

Upvotes: 1

Views: 11608

Answers (3)

Aman Chawla
Aman Chawla

Reputation: 1040

Using java inbuilt Pair class. ArrayList or any List of pairs can be constructed. you need to import javafx.util.pair for that. Similarly for 3 values. Use java's Triplet class.

eg: Pair p=new Pair(1, 2);

ArrayList or any List of these pairs can be constructed easily now

Upvotes: 2

JKostikiadis
JKostikiadis

Reputation: 2917

The 'lazy' way you could create an ArrayList<Integer[]> at each index you add an array of 2 places holding the value and the time ex new Integer[]{val,time} and then you can sort the arraylist using the Collection.sort and with the help of a Comparator

Here is a small example :

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        ArrayList<Integer[]> values = new ArrayList<>();

        Random rand = new Random();
        // just for testing I add random values but you
        // should add your values you read from your file
        for (int i = 0; i < 10; i++) {
            values.add(new Integer[] { rand.nextInt(100), rand.nextInt(100) });
            System.out.println(values.get(i)[0] + "\t" + values.get(i)[1]);
        }

        // Let's sort our ArrayList looking at the first index of each array
        // which holds the value
        Collections.sort(values, new Comparator<Integer[]>() {
            public int compare(Integer[] array1, Integer[] array2) {
                return array1[0].compareTo(array2[0]);
            }
        });

        // Print the results 
        System.out.println();
        System.out.println();
        for (int i = 0; i < 10; i++) {
            System.out.println(values.get(i)[0] + "\t" + values.get(i)[1]);
        }
    }
}

Output :

82  21
3   54
60  73
14  35
45  30
16  30
8   19
62  43
67  51
7   34


3   54
7   34
8   19
14  35
16  30
45  30
60  73
62  43
67  51
82  21

Upvotes: 0

Diasiare
Diasiare

Reputation: 755

You should create a class to wrap your values. Something like:

public class IntPair {
     public int value;
     public int time;
}

should do. You can then add a constructor, a compare method for sorting, and whatever other functionality you need.

Create the list as follows:

List<IntPair> list = new ArrayList<>();

Upvotes: 7

Related Questions