数组,List,Array List,LinkedList的区别

Java

数组

连续内存,大小不可变
创建的时候需要指定长度

List

List是一个接口,而ArrayList是List接口的一个实现类。 ArrayList类继承并实现了List接口。

因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们可以像下面那样为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。

List list; // 正确,list = null; 
List list = new List(); // 是错误的用法

// 这句创建了一个ArrayList实现类的对象后把它上溯到了List接口。
// 此时它就是一个List对象了,它有些ArrayList类具有的,但是List接口没有的属性和方法,它就不能再用了。
List list = new ArrayList(); 
 
// 创建一对象则保留了ArrayList的所有属性和方法。
ArrayList list=newArrayList();  
  • 参考
  • 和我在C++中学的类的继承类似

ArrayList

相当于是List类的继承 ,比如List <T> myList = new ArrayList<T>();
长度是动态的,不需要分配长度
类似C++里面的vector

ArrayList.remove() 方法注意事项

List<Integer> ls = new ArrayList<Integer>();
for (Integer i : ls){
        // 此方法会报错
        ArrayList.remove(i);
}
for (Integer i : ls){
        // 不能穿Integer,需要传int才行
        int a = i;
        ArrayList.remove(a);
}

LinkedList

是List类的继承,特点是拥有指向下一个node的指针

ArrayList和LinkedList的大致区别如下:

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
    参考

EmptyList

继承List类

Set 也是一个接口, 所以不能被实例化. 职能 Set <T> s = new HashSet<T>();

Arrays.asList();

首先,该方法是将数组转化为list。有以下几点需要注意:
(1)该方法不适用于基本数据类(byte,short,int,long,float,double,boolean)需要使用Integer 这种类型
(2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新(不懂)
(3)不支持add和remove方法

猜你喜欢

转载自blog.csdn.net/wangzihahaha/article/details/86424678