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. Shareplex搭建步骤(rman)

    实施例:rman/BCV 环境准备 splex软件上传 源端: #mkdir /quest #chmod -R 755 /quest #chown -R oracle:oinstall /quest ...

  2. 关于struts1与struts2

    1.Action方面 Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别.Struts2是一个 pull-MVC架构 ,从开发者角度看,就是说 ...

  3. 开源 UI 库中,唯一同时实现了大表格虚拟化和树表格的 Table 组件

    背景 有这样一个需求,一位 React Suite(以下简称 rsuite)的用户,他需要一个 Table 组件能够像 Jira Portfolio 一样,支持树形数据,同时需要支持大数据渲染. 截止 ...

  4. zookeeper watch笔记

    ZK其核心原理满足CP, 实现的是最终一致性, 它只保证顺序一致性. zookeeper 基于 zxid 以及阻塞队列的方式来实现请求的顺序一致性.如果一个client连接到一个最新的 followe ...

  5. 剑指offer-链表&数组

    1.圆圈中最后剩下的数 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  6. Blend学习之Loading加载动画

    介绍: Blend for visual studio 与 visual studio 是有区别的 两者虽然是IDEA 但是专注的方向是不同的,前者是专注UI后者专注业务逻辑,当然你要用blend f ...

  7. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  8. CF149D Coloring Brackets

    CF149D Coloring Brackets Link 题面: 给出一个配对的括号序列(如"\((())()\)"."\(()\)"等, "\() ...

  9. CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral

    论文提出类特定控制门CSG来引导网络学习类特定的卷积核,并且加入正则化方法来稀疏化CSG矩阵,进一步保证类特定.从实验结果来看,CSG的稀疏性能够引导卷积核与类别的强关联,在卷积核层面产生高度类相关的 ...

  10. 超级简单的照片画廊MVC

    下载Gallery.zip - 23.5 MB 介绍 我想在我的个人网站上添加一个简单的图片库,但找不到任何合适的方法来从文件夹而不是数据库中挑选图片.也许我应该看得更仔细些!尽管如此,下面是我实现的 ...