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. 4.Scala语法02 - 函数

  2. 2020 计蒜之道 预赛 第三场 石子游戏(简单)(暴力DP)

    石子游戏(简单) 原题链接 思路: 通过形式容易看出是一道DP.其中异或和的情况只有64种,所以我们可以开一维来记录当前异或和的状态. 利用dp[当前位置][异或和][是否选择当前]来进行状态转移.时 ...

  3. ASP.NET Core 基于声明的访问控制到底是什么鬼?

    从ASP.NET 4.x到ASP.NET Core,内置身份验证已从基于角色的访问控制(RBAC)转变为基于声明的访问控制(CBAC). 我们常用的HttpContext.User属性ASP.NET ...

  4. 2019.8.13 sdfzoier

    lxy: lixf acwing上的118,126 zhangtingyu zhaosirui wujialin

  5. redis发布订阅客户端报错

    转自简书[https://www.jianshu.com/p/a85ec38245da] 最近遇到一个问题,springBoot程序中有一个监听器,监听redis中发来的消息(其实是监听一个key的消 ...

  6. MySQL-Atlas--读写分离架构

    一.Atlas简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础 ...

  7. 简单两步实现Android app 本地设置信息的保存与调用

    调用值 SharedPreferences preferences = this.getSharedPreferences("mspda", 0); lblVer.setText( ...

  8. 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程

    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...

  9. 04 Storage and Calculation C语言中的存储和计算

    文章内容来源于Programming Hub的学习记录,本人整理添加了中文翻译,如有侵权,联系本人删除 Variables C语言中的变量 Let's extend our mainfunction ...

  10. E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    Linux下sudo apt-get install 安装时报错: 解决办法 1.   终端输入 ps  -aux ,列出进程.找到含有apt'-get或者wget的进程,      直接sudo k ...