> 文档中心 > Java集合框架的一些小知识

Java集合框架的一些小知识

目录

一、List和ArraysList

二、Queue和Deque

三、ArrayList和LinkList的区别与联系

四、其他相关知识


一、List和ArraysList

🍑List是一个接口,而ArrayList是List接口的一个实现类。

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

List res = new ArrayList(); 

 

🌰List a=new ArrayList();

📝则a拥有List的所有属性和方法,不会拥有其实现类ArrayList的独有的属性和方法。

a只能调用类ArrayList中重写List类的抽象方法

📝如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()),

则a.i是调用了List中的i,成员变量不会被重写

a.f()是调用了ArrayList中的f();——因为list中的成员方法f()在ArraysList中进行了重写


 

二、Queue和Deque

🔔Queue和Deque是接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口

Queue q = new LinkedList()

Deque stack = new LinkedList();


 

三、ArrayList和LinkList的区别与联系

List:是一个接口,规范了ArrayList 和 LinkedList中要实现的方法
ArrayList:实现了List接口,底层为动态类型顺序表
LinkedList:实现了List接口,底层为双向链表

 

1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。

2. 对于随机访问,ArrayList优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问。而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)

3. 对于插入和删除操作,LinkedList优于ArrayList,因为当元素被添加到LinkedList任意位置的时候,不需要像ArrayList那样重新计算大小或者是更新索引。

4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。


 

四、其他相关知识

 📝上一张图总结一些

 

📝一些简单的解释和说明 

  • 1. Collection:是一个接口,包含了大部分容器常用的一些方法
  • 2. List:是一个接口,规范了ArrayList 和 LinkedList中要实现的方法
  •     ArrayList:实现了List接口,底层为动态类型顺序表
  •     LinkedList:实现了List接口,底层为双向链表
  • 3. Stack:底层是栈,栈是一种特殊的顺序表
  • 4. Queue:底层是队列,队列是一种特殊的顺序表
  •     Deque:是一个接口
  • 5. Set:集合,是一个接口,里面放置的是K模型
  •     HashSet:底层为哈希桶,查询的时间复杂度为O(1)
  •     TreeSet:底层为红黑树,查询的时间复杂度为O( ),关于key有序的
  • 6. Map:映射,里面存储的是K-V模型的键值对
  •     HashMap:底层为哈希桶,查询时间复杂度为O(1)
  •     TreeMap:底层为红黑树,查询的时间复杂度为O( ),关于key有序