【发布时间】:2022-01-13 21:46:25
【问题描述】:
我想在数组中存储用户所需的尽可能多的元素。但是我该怎么做。
如果我要创建一个数组,我必须使用固定大小。每次将新元素添加到数组并且数组变满时,我想将其大小更新为“1”。
我厌倦了各种类型的代码,但没有成功。
如果有人能给我一个解决方案,那将是非常有帮助的 - 如果可能的话,在代码中。
【问题讨论】:
-
参考这个链接,它会给你一些想法Array ListArray Size
我想在数组中存储用户所需的尽可能多的元素。但是我该怎么做。
如果我要创建一个数组,我必须使用固定大小。每次将新元素添加到数组并且数组变满时,我想将其大小更新为“1”。
我厌倦了各种类型的代码,但没有成功。
如果有人能给我一个解决方案,那将是非常有帮助的 - 如果可能的话,在代码中。
【问题讨论】:
使用 ArrayList。如果您尝试添加到完整的 ArrayList,它的大小会自动增加。
【讨论】:
不要使用数组,而是使用java.util.List 的实现,例如ArrayList。 ArrayList 有一个数组后端,它将值保存在列表中,但数组大小由列表自动处理。
ArrayList<String> list = new ArrayList<String>();
list.add("some string");
对于其他元素类型,您还可以使用 list.toArray(new String[list.size()]) 等将列表转换为数组。
【讨论】:
System.out.println(list) 应该可以很好地完成这项工作 ;) 如果您想在单独的行上打印每个,您可以使用 for-each/enhanced-for loop 遍历列表中的每个值。
你可以使用数组列表
这里是字符串数组列表的示例
'导入java.io.BufferedReader; 导入 java.io.IOException; 导入 java.io.InputStreamReader; 导入 java.util.ArrayList;
公开课 Ex01 {
public static void main(String[] args) throws IOException {
BufferedReader userInput = new BufferedReader
(new InputStreamReader(System.in));
ArrayList<String> myArr = new ArrayList<String>();
myArr.add("Italian Riviera");
myArr.add("Jersey Shore");
myArr.add("Puerto Rico");
myArr.add("Los Cabos Corridor");
myArr.add("Lubmin");
myArr.add("Coney Island");
myArr.add("Karlovy Vary");
myArr.add("Bourbon-l'Archambault");
myArr.add("Walt Disney World Resort");
myArr.add("Barbados");
System.out.println("Stupid Vacation Resort Adviser");
System.out.println("Enter your name:");
String name = userInput.readLine();
Integer nameLength = name.length();
if (nameLength == 0)
{
System.out.println("empty name entered");
return;
}
Integer vacationIndex = nameLength % myArr.size();
System.out.println("\nYour name is "+name+", its length is " +
nameLength + " characters,\n" +
"that's why we suggest you to go to "
+ myArr.get(vacationIndex));
}
}'
同样你可以为整数、blooean和各种数据类型制作数组
更多细节你可以看到这个
http://www.anyexample.com/programming/java/java_arraylist_example.xml
【讨论】:
你不能。您可以创建一个新数组并将项目移动到该数组 - 或者您可以使用 ArrayList。
【讨论】:
创建列表对象,添加元素并使用 list.toArray(new String[list.size()]) 将该列表对象转换为数组
【讨论】:
您可以创建一个大小比原来大一个元素的临时数组,然后将原来的元素复制到 temp 中,并将临时数组分配给新的。
public void increaseSize() {
String[] temp = new String[original.length + 1];
for (int i = 0; i < original.length; i++){
temp[i] = original[i];
}
original = temp;
}
您可以通过多种方式更改大小,但同样的想法也适用。
【讨论】:
通过在java.util.Arrays 类String[] 中使用copyOf 方法,大小将自动/动态增加。在下面的代码中array 大小0 在使用Arrays.copyOf 进行操作后,字符串array 的大小增加到4。
package com.google.service;
import java.util.Arrays;
public class StringArrayAutoIncrement {
public static void main(String[] args) {
String[] data = new String[] { "a", "b", "c", "d", "e" };
String[] array = new String[0];// array initialize with zero
int incrementLength = 1;
for (int i = 0; i < data.length; i++) {
array = Arrays.copyOf(data, i + incrementLength);// increment by +1
}
/**
* values of array after increment
*/
for (String value : array) {
System.out.println(value);
}
}
}
输出:
a
b
c
d
e
【讨论】:
data 的副本。它创建一个空数组,然后用更长的数组替换那个数组,最后得到一个精确的副本,而不是更长的。输出也显示了这一点:数组是否更长,应该有一个null 输出。要实际增加数组的长度,array 的声明和整个第一个循环应该简单地替换为 String[] array = Arrays.copyOf(data, data.length + incrementLength);。
在低级别你可以这样做:
long[] source = new long[1];
long[] copy = new long[source.length + 1];
System.arraycopy(source, 0, copy, 0, source.length);
source = copy;
Arrays.copyOf() 也在做同样的事情。
【讨论】:
public class IncreaseArraySize {
public static void main(String[] args) {
int arr[] = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = 5;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println(" ");
System.out.println("Before increasing Size of an array :" + arr.length);
int arr2[] = new int[10];
arr = arr2;
arr2 = null;
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("");
System.out.println("After increasing Size of an array : " + arr.length);
}
}
【讨论】:
你可以这样做
import java.util.Scanner;
class Add
{
public static void main(String[] args)
{
Scanner obj=new Scanner(System.in);
char ans='y';
int count=0;
while(ans!='N'||ans!='n')
{
int initial_size=5;
int arr[]=new int [initial_size];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
if(count>0)
{
System.out.print("enter the element u want to add in array: ");
arr[initial_size-1]=obj.nextInt();
}
System.out.print("Do u want to add element in array?");
ans=obj.next().charAt(0);
if(ans=='y'||ans=='Y')
{
initial_size++;
count++;
}
}
}
}
【讨论】:
https://www.java2novice.com/java-arrays/array-copy/
int[] myArr = {2,4,2,4,5,6,3};
System.out.println("Array size before copy: "+myArr.length);
int[] newArr = Arrays.copyOf(myArr, 10);
System.out.println("New array size after copying: "+newArr.length);
你也可以这样做 myArr = Arrays.copyOf(myArr, 10);
在这种情况下,myArr = Arrays.copyOf(myArr, myAry.length+1);
【讨论】: