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

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、源码查阅

方法:

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

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

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

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

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

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());

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpspdg.html