I've been using Arrays a lot lately, and I've been addicted to it. I will write it as a memo.
When using arrays in Java, there are the following two methods. How to generate using new and how to generate using asList of Arrays class.
new ArrayList<T>()
//Generate an array
List<String> hoge = new AraryList<String>();
//Add element
hoge.add("test1");
hoge.add("test2");
Arrays.<T>asList()
//Generate an array
List<String> hoge = Arrays.<String>asList("test1", "test2");
Both can create a string array with "test1" and "test2".
Now that we have created the array, let's add / edit / delete it. The test code looks like this
sample.java: Case using Arrays
@Test
public void test_sample() {
List<String> test = Arrays.<String>asList("aaa", "bbb");
// 1.Add element
test.add("ccc");
// 2.Delete element
test.remove(1);
// 3.Edit element
test.set(1, "ddd");
// 4.Clear all elements
test.clear();
}
When I try to do this, except in case 3 java.lang.UnsupportedOperationException will occur.
But what about the case with new?
sample2.java: case using new
@Test
public void test_sample2() {
List<String> test = new ArrayList<>();
test.add("aaa");
test.add("bbb");
// 1.Add element
test.add("ccc");
// 2.Delete element
test.remove(1);
// 3.Edit element
test.set(1, "ddd");
// 4.Clear all elements
test.clear();
}
In this case, no error will occur even if you execute it, and the result will be as follows.
Contents of the array after the case of 1: aaa, bbb, ccc Contents of the array after the second case: aaa, ccc Contents of the array after case 3: aaa, ddd Contents of the array after the case of 4: Empty
Why is there a difference when both are just doing the same array operation? Using new will dynamically generate an array, but for asList in the Arrays class
This is because it returns a list of fixed sizes **.
It was also mentioned in the Java API specification. Excerpt from Class Arrays
Qualifiers and types | Method description |
---|---|
static <T> List<T> | asList(T... a) Link to the specified array Returns a list of fixed sizes |
When using new, the object of the specified element Generate. Therefore ** an entity exists **.
But in the case of Arrays.asList, I specified Like a list holding the contents of an element ** Just pretending to be **, so fixed size (fixed number) It becomes a list of If you do any operations related to numbers, you will get an UnsupportedOperationException error as described above.
The list generated by Arrays.asList controls the number of elements I couldn't do it, so I used a dynamic list Not suitable for processing (though I don't think it is normally used)
However, when I want to handle it as a list type with a fixed number of elements (which cannot be changed), I personally think that it is better because it does not allocate inadvertent memory than adding it to the object created by new.
Recommended Posts