JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)

2023-04-20,,

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 自定义讲解)的相关教程结束。

《JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解).doc》

下载本文的Word格式文档,以方便收藏与打印。