当前位置: 首页 > news >正文

企业社交网站定制今日十大新闻

企业社交网站定制,今日十大新闻,做简历的网站,steam账号注册网站List ArrayListArrayList注意事项ArrayList底层操作机制-源码分析(重点) VectorVector基本介绍 ——Vector和ArrayList比较Vector底层结构和源码分析 LinkedList基本介绍LinkedList的底层结构和操作机制LinkedList的增删改查 ——LinkedList和ArrayList比…

List

  • ArrayList
    • ArrayList注意事项
    • ArrayList底层操作机制-源码分析(重点)
  • Vector
    • Vector基本介绍
  • ——Vector和ArrayList比较
    • Vector底层结构和源码分析
  • LinkedList
    • 基本介绍
    • LinkedList的底层结构和操作机制
    • LinkedList的增删改查
  • ——LinkedList和ArrayList比较

ArrayList

ArrayList注意事项

  1. permits all elements, including null 。ArrayList 可以加入null,并且多个。
  2. ArrayList是由数组来实现数据存储的。
  3. ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高)看源码,在多线程情况下,不建议使用ArrayList。
    public static void main(String[] args) {ArrayList arrayList = new ArrayList();arrayList.add(null);arrayList.add(2);arrayList.add(null);arrayList.add("hello");System.out.println(arrayList);}

在这里插入图片描述
在这里插入图片描述

ArrayList底层操作机制-源码分析(重点)

  1. ArrayList中维护了一个Object类型的数组elementData。[debug看源码] transient Object[] elementData;
    transient表示瞬间,短暂的。表示该属性不会被序列化/串行化。
  2. 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。
  3. 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容 elementData为1.5倍。

点击链接跳转看韩顺平老师的视频讲解

注意,IDEA 默认情况下,Debug 显示的数据是简化后的,如果希望看到完整的数据需要做设置。
在这里插入图片描述

Vector

Vector基本介绍

import java.util.Vector;

  1. Vector类的定义说明
public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable
  1. Vector底层也是一个对象数组 protected Object[] elementData;
  2. Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized
public synchronized E get(int index){if (index >= elementCount)throw new ArraylndexOutOfBoundsException(index);return elementData(index);}

4)在开发中,需要线程同步安全时,考虑使用Vector
在这里插入图片描述

——Vector和ArrayList比较

在这里插入图片描述

Vector底层结构和源码分析

//无参构造器
//有参数的构造
Vector vector = new Vector();
for (int i = 0; i < 10; i++) {vector.add(i);
}
vector.add(100);
System.out.println("vector=" + vector);
1. new Vector() 底层public Vector() {this(10);}
补充:如果是  Vector vector = new Vector(8);走的方法:public Vector(int initialCapacity) {this(initialCapacity, 0);}
其中有一个装箱过程
2. vector.add(i)
2.1  //下面这个方法就添加数据到vector集合public synchronized boolean add(E e) {modCount++;ensureCapacityHelper(elementCount + 1);elementData[elementCount++] = e;return true;}2.2  //确定是否需要扩容 条件 : minCapacity - elementData.length>0private void ensureCapacityHelper(int minCapacity) {// overflow-conscious codeif (minCapacity - elementData.length > 0)grow(minCapacity);}2.3 //如果 需要的数组大小 不够用,就扩容 , 扩容的算法//newCapacity = oldCapacity + ((capacityIncrement > 0) ?//                             capacityIncrement : oldCapacity);//就是扩容两倍.private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);elementData = Arrays.copyOf(elementData, newCapacity);}

LinkedList

基本介绍

  1. LinkedList底层实现了双向链表和双端队列特点
  2. 可以添加任意元素(元素可以重复),包括null
  3. 线程不安全,没有实现同步

LinkedList的底层结构和操作机制

  1. LinkedList底层维护了一个双向链表
  2. LinkedList中维护了两个属性 first和 last分别指向首节点和尾节点
  3. 每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过 prev指向前一个,通过 next指向后一个节点。最终实现双向链表
  4. 所以 LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高
  5. 模拟一个简单的双向链表代码【代码】

见LinkedList01.java

LinkedList的增删改查

见LinkedListCRUD.java

public static void main(String[] args) {LinkedList linkedList = new LinkedList();linkedList.add(1);linkedList.add(2);linkedList.add(3);System.out.println("linkedList=" + linkedList);//演示一个删除结点的linkedList.remove(); // 这里默认删除的是第一个结点//linkedList.remove(2);System.out.println("linkedList=" + linkedList);//修改某个结点对象linkedList.set(1, 999);System.out.println("linkedList=" + linkedList);//得到某个结点对象//get(1) 是得到双向链表的第二个对象Object o = linkedList.get(1);System.out.println(o);//999//因为LinkedList 是 实现了List接口, 遍历方式System.out.println("===LinkeList遍历迭代器====");Iterator iterator = linkedList.iterator();while (iterator.hasNext()) {Object next =  iterator.next();System.out.println("next=" + next);}System.out.println("===LinkeList遍历增强for====");for (Object o1 : linkedList) {System.out.println("o1=" + o1);}System.out.println("===LinkeList遍历普通for====");for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));}
}

debug查看源码学习


有很多种删除方式

linkedList.remove();//默认删除第一个节点


——LinkedList和ArrayList比较

在这里插入图片描述

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

http://www.hkea.cn/news/160871/

相关文章:

  • 温岭哪里有做网站的如何自制网站
  • 知道创于 wordpress搜索引擎优化宝典
  • 乌兰县wap网站建设公司有效获客的六大渠道
  • 微信网站开发教程视频教程百度一下主页官网
  • 网站开发专业前景关键词挖掘排名
  • 网站开发属于什么职位类别seo查询站长工具
  • wordpress postmetaseoul national university
  • 商务网站的主要存在形式杭州百度快照优化公司
  • 个人备案网站做购物网站可以不班级优化大师免费下载电脑版
  • 贸易网站建设互联网广告代理加盟
  • 深圳网站建设网络公司河北关键词排名推广
  • 在工商网上怎么注册公司seo优化博客
  • 免费的小程序怎么赚钱历下区百度seo
  • 河北石家庄最新疫情最新消息优化防疫政策
  • 一站式做网站哪家强新闻小学生摘抄
  • 江西南昌网站建设公司哪家好谷歌google 官网下载
  • 公司网站用什么开发百度指数怎么用
  • 建站主机 wordpress济南网站万词优化
  • 哈尔滨app开发seo自学网官网
  • 网站答辩ppt怎么做全网关键词云在哪里看
  • 网站建设 视频seo关键词词库
  • 网站应用软件设计成都网站建设技术外包
  • 用哪个软件做网站网址查询域名解析
  • 网站安全优化域名停靠浏览器
  • 我做中医培训去哪个网站找学员谷歌排名算法
  • 如何将网站让百度收录网店培训班
  • wordpress旧版页面编辑界面百度seo推广计划类型包括
  • 网站建设茶店网网站换友链平台
  • 珠海建设工程信息网站网络营销百度百科
  • 帮别人做网站推广犯法吗关键词排名网站