Vector 向量

Vector简述

  • 1).Vector底层是用数组实现的List
  • 2).虽然线程安全,但是效率低,所以并不是安全就是好的
  • 3).底层大量方法添加synchronized同步标记,synchronized检查对象是否添加了对象的对象锁
  • 4).容器对象,需要多个线程共享的时候,考虑使用Vector
  • 5).实际使用情况不多,一般笔试面试中会问到差异性

Vector与ArrayList、LinkedList简单区分

  • 需要线程安全时,使用Vector
  • 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)
  • 不存在线程安全问题时,增加或删除元素较多用LinkedList

Vector 实战

  • 1、创建Vector

Vector<String> vectorList = new Vector<>(); vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B");
  • 2、测试Vector

System.out.println(vectorList.toString());
  • 3、源码查阅

方法:

从源码中可以看到方法的实现大致与List的相似,只是多了synchronized限制:

  • 4、常用方法实战

    • (1) 降序排序
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 降序排序
vectorList.sort(Comparator.reverseOrder());
System.out.println(vectorList.toString());
  • (2)升序排序
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 升序排序
vectorList.sort(Comparator.naturalOrder());
System.out.println(vectorList.toString());
  • (3)遍历输出每一个元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 遍历输出每一个元素
vectorList.forEach((k) -> {
System.out.println(k.toString());
});
  • (4)输出index开始以后的元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 输出index开始以后的元素
ListIterator<String> stringListIterator = vectorList.listIterator(3); while (stringListIterator.hasNext()) {
String next = stringListIterator.next();
System.out.println("stringListIterator:" + next); }
  • (5)过滤
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 过滤
vectorList.removeIf(
new Predicate<String>() {
@Override
public boolean test(String s) {
// 过滤掉等于C的
return "C".equals(s);
}
}
); System.out.println(vectorList.toString());
  • (6)截取从索引值1到2的元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B");
Vector<String> clone = (Vector<String>) vectorList.clone(); // 截取从索引值1到2的元素
List<String> stringList = clone.subList(1, 3);
System.out.println("截取" + stringList.toString());
  • (7)替换数组内的值
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); UnaryOperator<String> unaryOperator = (String string) -> { return string + ".mrLiu";
}; // 替换数组内的值
vectorList.replaceAll(unaryOperator);
System.out.println(vectorList.toString());
  • (8)移除所有元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 移除所有元素
vectorList.removeAllElements();
System.out.println(vectorList.toString());
  • (9)添加元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 添加元素
vectorList.addElement("H");
System.out.println(vectorList.toString());
  • (10)修改元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 修改元素
vectorList.insertElementAt("V", 0);
System.out.println(vectorList.toString());
  • (11)首个元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 首个元素
System.out.println(vectorList.firstElement());
  • (12)末尾元素
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 末尾元素
System.out.println(vectorList.lastElement());
  • (13)容器大小
        Vector<String> vectorList = new Vector<>();

        vectorList.add("C");
vectorList.add("E");
vectorList.add("A");
vectorList.add("D");
vectorList.add("B"); // 容器大小
System.out.println(vectorList.capacity());

JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)的更多相关文章

  1. JDK源码阅读-------自学笔记(二十四)(java.util.LinkedList 再探 自定义讲解)

    一.实现get方法 1.一般思维实现思路 1).将对象的值放入一个中间变量中. 2).遍历索引值,将中间量的下一个元素赋值给中间量. 3).返回中间量中的元素值. 4).示意图 get(2),传入角标 ...

  2. JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)

    一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...

  3. JDK源码阅读-------自学笔记(五)(浅析数组)

    一.数组基础 1.定义和特点 数组也可以看做是对象,数组变量属于引用类型,数组中每个元素相当于该队形的成员变量,数组对象存储在堆中. 2.初始化数组 常用类初始化 // 整型初始化 int[] int ...

  4. JDK源码阅读(1)_简介+ java.io

    1.简介 针对这一个版块,主要做一个java8的源码阅读笔记.会对一些在javaWeb中应用比较广泛的java包进行精读,附上注释.对于容易混淆的知识点给出相应的对比分析. 精读的源码顺序主要如下: ...

  5. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  6. JDK源码阅读(三):ArraryList源码解析

    今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...

  7. JDK源码阅读(一):Object源码分析

    最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...

  8. ZooKeeper源码阅读——client(二)

    原创技术文章,转载请注明:转自http://newliferen.github.io/ 如何连接ZooKeeper集群   要想了解ZooKeeper客户端实现原理,首先需要关注一下客户端的使用方式, ...

  9. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

随机推荐

  1. php第六天-UNIX时间戳/格式化时间,程序错误发送的领域

    ###0x01 PHP的错误处理 1.1 错误报告级别 PHP程序的错误发生一般归属于下列三个领域: 语法错误: 语法错误最常见,并且也容易修复.如:代码中遗漏一个分号.这类错误会阻止脚本的执行. 运 ...

  2. 【转】postgreSQL​之autovacuum性能问题分析(一)

    最近笔者在项目中遇到postgreSQL的性能问题,所以计划在公众号里写一个系列文章去追踪记录这些问题以及分析过程或解决方法. 本文主要是关于postgreSQL的autovacuum的问题.可能很多 ...

  3. 【论文】The Road to SDN: An Intellectual History of Programmable Networks

    目录 ABSTRACT: 1 Introduction: 2 The Road to SDN: 2.1 Active Networking Technology push and use pull I ...

  4. 多NX如何共存

    在安装NX时,本机已经装了NX其他版本,只能修改当前程序,无法安装,那么多NX如何共存? 如图:先安装了32位NX8.5,后安装64位NX 8.5时弹的框. 解决办法有两种: 1)将已经安装的NX目录 ...

  5. 什么是Python???

    1.python是一种解释型语言,这就是说python不用像C语言或者C的衍生语言那样在执行前进行编译. 2.Python是一种动态类型的语言,就是python支持x = 111或者x="1 ...

  6. org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null

    通过这个简单的案例,手把手教给你分析异常信息(适合初学者看) org.springframework.dao.InvalidDataAccessApiUsageException: The given ...

  7. django 的初始项目结构

    2.创建Django项目   root@dev:shiyanlou_project# workon syl (syl) root@dev:shiyanlou_project# cd /aaa/shiy ...

  8. MySQL 5.7安装与配置

    Windows 一.到MySQL官网下载压缩版本,下载后文件为mysql-5.7.20-winx64.zip,解压到D:\develop\mysql-5.7.20-winx64.   二.在系统变量P ...

  9. Vue编写的页面部署到springboot网站项目中出现页面加载不全问题

    问题描述: 在用Vue脚手架 编写出一个页面之后, 部署到后台项目中, 因为做的是一个页面 按理来说 怎么都能够在服务器上运行 , 我也在自己的node环境测试 , 在同学的springboot上运行 ...

  10. Mac 效率工具必备神器 —— Alfred

    前言 alfred 这款软件称为「神器」真是当之无愧.今天专门总结一下,作为之前 Mac 配置教程-开发篇 的补充. 需要说明的是,如果你发现我介绍的功能无法使用,则代表需要花钱购买它的 Powerp ...