我需要最简单的方法将一个项目添加到Java数组的前面 我需要Java数组而不是ArrayList。
答案 0 :(得分:3)
有两种方法可以做到这一点。一种使用对象或泛型。我建议您使用泛型,因为您可以在示例中看到更多灵活性。他是一个使用泛型的狙击手:
public static <T> T[] add2BeginningOfArray(T[] elements, T element)
{
T[] newArray = Arrays.copyOf(elements, elements.length + 1);
newArray[0] = element;
System.arraycopy(elements, 0, newArray, 1, elements.length);
return newArray;
}
如果您有Dot类,并且想要在开始处添加元素,则只需使用它即可。
int size = 20;
Dot[] dots = new Dot[size];
for (int i = 0; i < size; i++) {
dots[i] = new Dot("This is a dot");
}
Dot goal = new Dot("This is a goal");
System.out.println(Arrays.toString(add2BeginningOfArray(dots, goal)));
此实现将帮助您将任何元素添加到与该元素相同类的数组的开头。
使用对象可以达到与本示例相同的效果:
public static Object[] add2BeginningOfArray(Object[] elements, Object element){
Object[] tempArr = new Object[elements.length + 1];
tempArr[0] = element;
System.arraycopy(elements, 0, tempArr, 1, elements.length);
}
现在,您需要将数组声明为Object[]
并使用这种声明来处理它是什么问题。
Object[] foo = {"2", "3", "4"};
//adding an element to the beginning array
Object[] numbers = add2BeginningOfArray(foo, "1");
System.out.println(Arrays.toString(numbers));
答案 1 :(得分:3)
如果可以选择的话,Apache Commons Lang类'ArrayUtils'使此操作非常简单:
{{1}}
答案 2 :(得分:2)
根据Java tutorials(我完全建议初学者完成工作)
数组是一个容器对象,它包含固定数量的单一类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。
由于数组无法调整大小 - 您可以覆盖第一个元素,但要执行插入,您必须创建一个比前一个更大的新数组1,第一个位置的新元素,并使用现有元素填充数组的其余部分。
当然,在实践中不要这样做。而是使用适合您实际用例的集合。
所以问题的实际答案是:在java数组前面添加项目的最简单方法是使用更好的集合类型,例如Deque。
如果需要插入前端,我无法想到Java中的任何有效原因是不使用比原始数组更合适的集合。
答案 3 :(得分:2)
创建后,无法调整数组大小。如果必须添加元素,则需要创建新数组。
如果您知道数组类型它是微不足道的,但更好的解决方案将适用于任何数组类型,使用java.lang.reflect.Array
示例代码:
public static Object addElementInFrontOfArray(Object array, Object element) {
int newArraySize = Array.getLength(array)+1;
Object newArray = Array.newInstance(element.getClass(), newArraySize);
//Add first element
Array.set(newArray, 0, element);
for (int i=1 ; i<newArraySize; i++) {
Array.set(newArray, i, Array.get(array, i-1));
}
return newArray;
}
考虑你可以传递一个int []数组作为参数但是会返回一个Integer [] arrary
答案 4 :(得分:2)
考虑此来源
https://www.journaldev.com/763/java-array-add-elements
您可以通过以下操作在数组的开头添加新元素:
$app->get('/{basetype:guids|tester}/{guid}/logs/{id:[0-9]+}', function (Request $request, Response $response, $args) {
switch($request->getQueryParam('ContentType')) {
case 'text':
//
return $this->view->render($response, 'log.html', $rs);
case 'file':
$uri=$request->getUri();
$path=$uri->getPath();
$uri->withPath(_VER_.$path);
return $this->serverBridge->proxy($request, $response, 'application/octet-stream');
}
});
class ServerBridge
{
protected $httpClient;
public function __construct(\GuzzleHttp\Client $httpClient)
{
$this->httpClient=$httpClient;
}
public function proxy(\Slim\Http\Request $slimRequest, \Slim\Http\Response $slimResponse):\Slim\Http\Response {
//$slimRequest is used to obtain data to send to Guzzle
$curlResponse = $this->httpClient->request($method, $path, $options);
//use $curlResponse to get data and write to $slimResponse
return $slimResponse;
}
}
答案 5 :(得分:1)
为什么不使用ArrayList?
您可以使用数组将其转换为List,如下所示:
List<Integer> myList = Arrays.asList(1,2,3);
//Instead of 1,2,3 you could create an Integer array: Integer[] myArray = {1,2,3};
myList.add(0, 25);
如果你决定这样做,你可以检查这个问题的答案:
Java Arrays how to add elements at the beginning
或者只是查看文档:
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
答案 6 :(得分:1)
for(int i = roadVehicles.length; i > 0; i--) {
if (roadVehicles[i-1] != null) {
roadVehicles[i] = roadVehicles[i-1];
}
}
roadVehicles[0] = car;
答案 7 :(得分:0)
这是我能找到的最简单方法的具体示例:
class DatabaseQueriesTestCase(TestCase):
scan_uri = "something"
def clear_query_caches(self):
"""
Resets all caches that may prevent query execution.
Needed to ensure deterministic behavior of ``assertNumQueries`` (or
after external changes to some Django database records).
"""
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
ContentType.objects.clear_cache()
Site.objects.clear_cache()
def setUp():
self.clear_query_caches()
def test_API_1(self):
payload = {
'id': 12,
'name': "ABCD"
}
self.assertNumQueries(13, self.client.post, self.scan_uri, data=payload)
基本上,它使用 List<StackTraceElement> stack = new ArrayList<StackTraceElement> (Arrays.asList (e.getStackTrace()));
stack.add (0, new StackTraceElement ("class", "method", "file", 25439));
StackTraceElement[] newStack = new StackTraceElement[stack.size()];
newStack = stack.toArray (newStack);
e.setStackTrace (newStack);
将数组转换为java.util.Arrays.asList()
,添加到列表,然后使用List
将列表转换回数组。
正如每个人都说过的那样,除非您将所有元素都先移一个,否则就无法真正添加到数组的开头,或者像我的解决方案一样,创建一个新数组。
答案 8 :(得分:-1)
只需 .unshift()
这会在数组的开头添加一个元素。