gpt4 book ai didi

java - 如何将元素添加到非连续索引的ArrayList中

转载 作者:行者123 更新时间:2023-12-01 17:52:21 24 4
gpt4 key购买 nike

我正在尝试使用非连续索引将元素添加到 Arraylist 中,例如:

我想先在索引 3 处添加一个元素,然后再在索引 (0,1,2) 处添加任何元素。稍后我也会填写0,1,2处的索引。

这是我的代码:

public static void main(String[] args) throws FileNotFoundException {

List<Integer> numbers= new ArrayList<Integer>();

Scanner inp = new Scanner(System.in);

int[] x = {1,5,2,4,3,0};

System.out.println("Enter elements:"+"\n");
for(int i=0;i<x.length;i++) {

int index = x[i];
numbers.add(index, inp.nextInt());

}

我似乎收到此错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at Test1.main(Test1.java:28)

我理解这个错误,但我似乎没有找到解决这个问题的方法。任何帮助都感激不尽。如果有另一种奇特的数据结构允许我进行非连续索引,请告诉我,如果我的问题没有任何意义,请原谅我。

最佳答案

您是否考虑过使用 map

Map<Integer,Integer> myNumbers = new HashMap<>();
myNumbers.put( 4, 100 );
myNumbers.put( 2, 199 );
myNumbers.put( 1, 150 );
System.out.println( myNumbers.get( 2 ) );

Map 有多种实现,例如HashMapTreeMap。选择哪一个取决于您的要求,例如,如果您想按特定顺序存储元素,或者您不关心顺序。

在您的用例中,可以像这样使用 map :

int[] x = { 1,5,2,4,3,0 };
// Try this instead of the above array, as well:
//int[] x = { 1337, 42, 777 };

// The Map can take an (almost) unlimited number of entries and gaps between
// indices / keys (e.g. 0, 1, 7, 23) are no problem. Only elements that you
// *put* into the Map, are part of it.
Map<Integer,Integer> numbersMap = new TreeMap<>();

System.out.println( "Enter elements:\n" );
try( Scanner inp = new Scanner( System.in ) ) {
for( int i=0; i<x.length; i++ ) {
int index = x[i];
System.out.print( "Enter element " + index + ": " );
int userInput = inp.nextInt();
numbersMap.put( index, userInput );
}
}

System.out.println( "Your Map contains these entries:" );
for( Map.Entry<Integer,Integer> entry : numbersMap.entrySet() ) {
System.out.println( "Element[" + entry.getKey() + "] = " + entry.getValue() );
}

由于 x 数组中的索引是连续的、没有间隙、从零开始且提前已知的,因此在这种特殊情况下您也可以使用类似的索引:

int[] x = { 1,5,2,4,3,0 };
Integer[] output = new Integer[ x.length ];

System.out.println( "Enter elements:\n" );
try( Scanner inp = new Scanner( System.in ) ) {
for( int i=0; i<x.length; i++ ) {
int index = x[i];
System.out.print( "Enter element " + index + ": " );
int userInput = inp.nextInt();
output[ index ] = userInput;
}
}

List<Integer> numbers = Arrays.asList( output );

System.out.println( numbers );

但我更喜欢 Map 方法,因为它更灵活且不易出错。

关于java - 如何将元素添加到非连续索引的ArrayList中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com