我见过很多次这样的代码:
List<String> list = new ArrayList<String>();
为什么人们采用ArrayList(和其他类)的父代替生成对象的类型?
这会降低性能吗?或者为什么有人这样做?
ArrayList的默认容量为10个对象.当大小超过10个对象时,ArrayList将在内部增加其容量.当我们从ArrayList中删除对象时,容量是否会降低.
如果ArrayList容量没有减少,这是否会导致性能问题?
我想做这样的事情:
private ArrayList<String[]> addresses = new ArrayList<String[3]>();
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.什么是最简单的方法来存储多个地址,每个地址有3个字段在一个数组中,而不为它创建一个单独的类?
我想在arraylist中搜索一个字符串.我的ArrayList包含:
ArrayList <String> list = new ArrayList();
list.add("behold");
list.add("bend");
list.add("bet");
list.add("bear");
list.add("beat");
list.add("become");
list.add("begin");
Run Code Online (Sandbox Code Playgroud)
现在我想搜索"bea"它,它应该返回一个包含"bear"和的列表"beat".我该如何实现它?
实现以及扩展的java.util.ArrayList实现.但是在java文档中你可以看到AbstractList已经实现了List.那么实现List以及扩展AbstractList不是多余的吗?
我的第二个问题
请看下面的代码:ListAbstractList
String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
List<String> a = Arrays.asList(stra);
Run Code Online (Sandbox Code Playgroud)
Arrays.asList()Arrays类的方法包含自己的ArrayList实现.但是这个只扩展了AbstractList,但没有实现List.但上面的代码编译.
但是当代码被修改为以下内容时
String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
java.util.ArrayList<String> a = Arrays.asList(stra);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:cannot convert form List<String> to ArrayList<String>
这背后的原因是什么?
EDIT
Arrays.asList()确实返回自己的ArrayList实现.看看这个.
我在Java中有这个奇怪的(我认为)问题.我有一个ArrayList,我想要一个子列表.但我得到了以下例外.
package javatest;
import java.util.ArrayList;
public class JavaTest {
public static void main(String[] args) {
ArrayList<Integer> alist = new ArrayList<Integer>();
alist.add(10);
alist.add(20);
alist.add(30);
alist.add(40);
alist.add(50);
alist.add(60);
alist.add(70);
alist.add(80);
ArrayList<Integer> sub = (ArrayList<Integer>) alist.subList(2, 4);
for (Integer i : sub)
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
run:线程"main"中的异常java.lang.ClassCastException:java.util.RandomAccessSubList无法强制转换为javatest.JavaTest.main中的java.util.ArrayList(JavaTest.java:17)Java结果:1
获取子列表的正确方法是什么?
谢谢
当我做
ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0, 1);
Run Code Online (Sandbox Code Playgroud)
Java给了我
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.set(Unknown Source)
at HelloWorld.main(HelloWorld.java:13)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以预先保留ArrayList的大小,然后立即使用索引,就像数组一样?
文档ArrayDeque说:
当用作堆栈时,此类可能比Stack快,并且当用作队列时比LinkedList更快.
没有提到使用ArrayDeque堆栈和使用堆栈之间的区别ArrayList.您可以使用ArrayList如下堆栈作为堆栈.
list.add(object); // push
object = list.remove(list.size() - 1); // pop
Run Code Online (Sandbox Code Playgroud)
我发现当我只用ArrayList这种方式时,它的性能比它差ArrayDeque.这种差异的原因是什么?当然,它不仅仅是电话size()?在内部,都ArrayList和ArrayDeque使用的是实现Object[]由更大的阵列需要时更换,所以可靠地性能应该是大约相同的?