将项添加到Java数组的开头的最简单方法是什么

时间:2016-04-23 06:59:05

标签: java

我需要最简单的方法将一个项目添加到Java数组的前面 我需要Java数组而不是ArrayList。

9 个答案:

答案 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()

这会在数组的开头添加一个元素。

相关问题