基础篇之集合(一)(List)总结

1.  List集合下常用的集合(ArrayList,LinkedList,Vector);

  JVM垃圾回收GC,Java中采取了可达性分析法,标记所有从根节点开始的可达对象,未被标记的对象就是未被引用,但是没有引用的不一定会被作为垃圾清理,因为有些是可复活对象,这里不作说明,除以上情况以外的会被作为垃圾清理,什么时候开始清理,这个涉及到内存机制,这里不作说明,详情可见垃圾复制算法等。

1)LinkedList:LinkedList底部是基于链表,元素可重复,线程不安全,查询慢,增删快;

原因:

基于链表:源码分析

//第一个对象的引用和最后一个对象的引用
	transient Node<E> first;
     transient Node<E> last;
//每个元素的头(前一个对象的引用),中(自己本身的信息),尾(下一个对象的引用)
  	E item;
    	Node<E> next;
    	Node<E> prev;

元素可重复:源码分析

     //没有去重机制
	public boolean add(E e) {
        linkLast(e);
        return true;
    	}
	void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
	//最后一个元素指向新加入的元素
        last = newNode;
	//l是否为null
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    } 

线程不安全:   其它线程不会暂停;

查询慢,增删快:    双向链表,从头或者从尾开始查询(依据size >> 1//除2),所以慢,增删只需要更改上面基于链表中的next和prev的所以快

2)ArrayList:ArrayList底部是基于数组,元素可重复,线程不安全,查询快,增删慢;

原因:

基于数组,源码分析:

transient Object[] elementData

元素可重复:源码分析

     //没有去重机制
   public boolean add(E e) {
         ensureCapacityInternal(size + 1);
         elementData[size++] = e;
         return true;
     }

线程不安全:其它线程不会暂停;

查询快,增删慢: 基于数组所以查询快,增删慢原因如下:

System.arraycopy(elementData, index+1, elementData, index,numMoved);

  

3)Vector:Vector底部是基于数组,元素可重复,线程安全,效率低

类似于ArrayList,但在其基础上添加了synchronized,线程安全,其它线程会暂停,所以效率低

时间: 2024-11-03 20:58:55

基础篇之集合(一)(List)总结的相关文章

基础篇之集合(二)总结

1. Map集合和collection结合的区别 1>Collection一次存一个元素:Map一次存一对元素: 2>Collection是单列集合:Map是双列集合: 3>Map中的存储的为键值对,键与值之间存在着映射关系 . 2. 数组和集合的区别 1>数组长度固定:集合长度可变: 2>数组可以存储基本数据类型和存储引用数据类型:集合只能存储引用数据类型: 3. map下常用的集合<HashMap,TreeMap> HashMap:底层基于数组加链表,键不可以

Java 基础篇之集合

List 集合 List 集合中元素有序.可重复,集合中每个元素都有其对应的索引顺序. List 判断两个对象相等,只要通过 equals 方法比较返回 true 即可. 看个例子: public class A { public boolean equals(Object obj) { return true; } } import java.util.ArrayList; import java.util.List; public class ListTest2 { public stati

【Unity|C#】基础篇(19)——集合库(Collections)

[学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/1mhOmBG0 其他文章 C#集合类型大揭秘(实现原理):https://www.cnblogs.com/songwenjie/p/9185790.html [内容] 非泛型集合 ArrayList Hashtable —————————— SortedList —————————— Queue

基础篇——集合与泛型

一.集合 TreeSet:以有序状态保持并可防止重复,其元素必须是Comparable HashMap:可用成对的key/value来存取 LinkedList:针对经常插入或者删除中间元素所设计的高效率集合 HashSet:防止重复的集合,可快速地找出相符的元素 LinkedHashMap:类似HashMap,但可以记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序 ArrayList:可以避免重复的元素,动态的操作 二.排序 对于基础主数据类型,可以用Collection.sort

Hybrid APP基础篇(四)-&gt;JSBridge的原理

说明 JSBridge实现原理 目录 前言 参考来源 前置技术要求 楔子 原理概述 简介 url scheme介绍 实现流程 实现思路 第一步:设计出一个Native与JS交互的全局桥对象 第二步:JS如何调用Native 第三步:Native如何得知api被调用 第四步:分析url-参数和回调的格式 第五步:Native如何调用JS 第六步:H5中api方法的注册以及格式 进一步完善JSBridge方案 思路 实现 注意 完整的JSBridge 完整调用流程图 另外实现:不采用url sche

DOM系列---基础篇

DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) .DOM 描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某一部分.DOM 产生于 网景公司及微软公司创始的 DHTML(动态 HTML) ,但现在它已经成为表现和操作页面标记的真正跨平台.语言中立的方式. DOM 中的三个字母: D(文档)可以理解为整个 Web 加载的网页文档: O(对象)可以理解为类似 window 对象之类的东西,可以调用属性

Spark性能优化指南——基础篇

前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作,应用范围与前景非常广泛.在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark.大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快.性能更高. 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的.如果没有对Spar

SQL Server调优系列基础篇(联合运算符总结)

前言 上两篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符的优化技巧,本篇我们总结联合运算符的使用方式和优化技巧. 废话少说,直接进入本篇的主题. 技术准备 基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析. 一.联合运算符 所谓的联合运算符,其实应用最多的就两种:UNION ALL和UNION. 这两个运算符用法很简单,前者是将两个数据集结果合并,后者则是合并后进行去重操作,如果有过写T-SQL语句的码农都不会陌生. 我们来分析下

Python基础篇(八)

key words:私有变量,类静态变量,生成器,导入Python模块,r查看模块可以使用的函数,查看帮助信息,启动外部程序,集合,堆,时间模块,random模块,shelve模块,文件读取等 >>> class Rectangle: ...     def __init__(self): ...         self.__width = 0 ...         self.__height = 0 ...     def setSize(self,width,height): .