java学习随笔--- 捣蛋vector

最近比较有时间啦,有时间搞下java,个人觉得学这门语言语法太多啦,不一一去学习啦,心血来潮,挂了个struct2的源代码,一入深似海啊,看得我天花缭乱,从最简单的开始吧

 1 public static void main(String[] args) {
 2
 3         Vector v = new Vector(4);
 4
 5         //向Vector中添加元素 静态数组+动态扩展
 6         //使用add方法直接添加元素
 7         v.add("Test0");
 8         v.add("Test1");
 9         v.add("Test0");
10         v.add("Test2");
11         v.add("Test2");
12
13         //从Vector中删除元素
14         v.remove("Test0"); //删除指定内容的元素
15         v.remove(0); //按照索引号删除元素
16
17         //获得Vector中已有元素的个数
18         int size = v.size();
19         System.out.println("size:" + size);
20
21         //遍历Vector中的元素
22         for(int i = 0;i < v.size();i++){
23         System.out.println(v.get(i));
24         }
25 }

代码很简单啦,学过数据结构的都知道,简单的新增改查啦,不过我们要深入一下了解,这玩意跟数组有什么区别

构造函数如下,意思是说你可以初始化一个容量的数,多少你自己决定

 1  /**
 2      * Constructs an empty vector with the specified initial capacity and
 3      * with its capacity increment equal to zero.
 4      *
 5      * @param   initialCapacity   the initial capacity of the vector
 6      * @throws IllegalArgumentException if the specified initial capacity
 7      *         is negative
 8      */
 9     public Vector(int initialCapacity) {
10     this(initialCapacity, 0);
11     }

我们接着来看,java的构造函数可真的比php强大,支持不同参数调用,换php的话早就报错啦

 1     /**
 2      * Constructs an empty vector with the specified initial capacity and
 3      * capacity increment.
 4      *
 5      * @param   initialCapacity     the initial capacity of the vector
 6      * @param   capacityIncrement   the amount by which the capacity is
 7      *                              increased when the vector overflows
 8      * @throws IllegalArgumentException if the specified initial capacity
 9      *         is negative
10      */
11     public Vector(int initialCapacity, int capacityIncrement) {
12     super();
13         if (initialCapacity < 0)
14             throw new IllegalArgumentException("Illegal Capacity: "+
15                                                initialCapacity);
16     this.elementData = new Object[initialCapacity];
17     this.capacityIncrement = capacityIncrement;
18     }

代码是不是很简单,简单的初始化一个对象数组,连我一个高中生的看出来啦,注意到第二个参数,这个是控制数组填满了之后要怎么增加,可以理解为一个策略吧

我们来看看添加元素是怎样实现的

 1   /**
 2      * Appends the specified element to the end of this Vector.
 3      *
 4      * @param e element to be appended to this Vector
 5      * @return {@code true} (as specified by {@link Collection#add})
 6      * @since 1.2
 7      */
 8     public synchronized boolean add(E e) {
 9     modCount++;
10     ensureCapacityHelper(elementCount + 1);
11     elementData[elementCount++] = e;
12         return true;
13     }
synchronized 这玩意就是多线程安全的时候用的,防止多个线程同事操作

关键是 ensureCapacityHelper  这个函数
 1 /**
 2      * This implements the unsynchronized semantics of ensureCapacity.
 3      * Synchronized methods in this class can internally call this
 4      * method for ensuring capacity without incurring the cost of an
 5      * extra synchronization.
 6      *
 7      * @see #ensureCapacity(int)
 8      */
 9     private void ensureCapacityHelper(int minCapacity) {
10     int oldCapacity = elementData.length;
11     if (minCapacity > oldCapacity) {
12         Object[] oldData = elementData;
13         int newCapacity = (capacityIncrement > 0) ?
14         (oldCapacity + capacityIncrement) : (oldCapacity * 2);
15             if (newCapacity < minCapacity) {
16         newCapacity = minCapacity;
17         }
18             elementData = Arrays.copyOf(elementData, newCapacity);
19     }
20     }
可以这么理解吧,上面这段代码就是看看数组满了没有,如果满了就动态的增加,还记得我们上面说的那个参数吗,就是可以理解为扩展因子,如果没有定义的话就double增加,就是这么简单,貌似跟c语言的动态数组好像啊

总结一下

上面我们学到的知识点
1. synchronized  同步用的,相当于一个锁吧
2. Arrays.copyOf 这函数是从一个数组复制到一个新数组里面,新数组容量可以自己定义

3. java 的构造函数可以支持多个,前提你每个构造函数的参数都不同

4. vector 这东西跟数组没什么区别,只不过它比静态数组可以自动扩展罢了今天就到这里吧

				
时间: 2024-10-13 00:42:31

java学习随笔--- 捣蛋vector的相关文章

Java学习随笔 - Java保留字

零.说在前面 之前主要是学C/CPP,由于某些原因,打算从头开始把Java的基础从头过一遍,巩固一下.于是,从今天开始开坑Java学习随笔,会将自己在复习Java过程中的一些心得体会啥的写上来,帮助自己整理知识. 一.synchronized synchronized关键字之前都没见过,于是Google了一下.它的作用是给对象.方法.代码块加锁,使得同时只能有一个线程执行.使用.相当于是互斥的一种关系. 二.transient 一个类在实现了Serializable接口之后,其中有部分数据不想进

(。??)ノ~个人java学习随笔记录

基本认识 1.编程思维 根据这几天的java学习,编写程序最重要的就是要有一个清晰的思路.语法上的错误可以跟随着不断的联系与学习来弥补,清晰的思维却只有自己来前期模仿,后面慢慢摸索形成一套属于自己的思维方式. 2.编程方向 程序编写方面考虑的是完成某个任务需要的东西(对象),也就是达成目标需要用什么来完成.程序主要编写思路也是围绕这些东西来写,而不是围绕完成这个目标的步骤.(这就是所谓的面向对象编程,和C语言最大的区别) 3.编程习惯 随着以后编写的程序的不断扩张,程序会越来越大,需要的对象也会

JAVA 学习随笔 : JDK Enhancement Process JEP process

是时候寻找一个学习JAVA的路径了 ---- JDK Enhancement Process Oracle发布了JDK增强提案与路线图进程,目的在于鼓励OpenJDK提交者贡献点子和扩展以改进OpenJDK生态圈. Earlier this year, Oracle published the JDK Enhancement Proposal and roadmap process. The purpose of this is to allow OpenJDK committers to su

java学习随笔(二)

运算符:又叫操作符,是一个用于运算的符号,他作用于一个或多个操作数(参与运算的数据) 运算符按操作数的数量又分为:一元(目)运算符,二元(目)运算符,三元(目)运算符 按运算符的功能分为:算术运算符(用于数学运算),逻辑运算符(用于判断真假),位运算符(用于二进制运算),其他 在多种运算符运算时:优先级越高的运算符,会优先得到执行,优先级相同的运算符,会从左到右依次执行 使用多个运算符的常见场景:赋值运算,数学运算,类型转换和函数调用,逻辑运算,三目运算,其他运算 赋值运算:永远最后运行,数学运

java学习随笔(一)入门篇

java之父叫James Gosling java的吉祥物叫duke也叫JavaBean. 我们通过编写源代码通过编译器将源码转为电脑认识的机器语言从而实现对电脑的命令 代码的执行:需通过编译器將源代码编译成机器语言,因为电脑只会读懂机器语言(高电平1,低电平0)0,1组成 java拥有编译器和解释器两种所以可以实现多平台操作. java的特点有:简单性,纯面向对象,跨平台 JDK:java开发工具包  JRE:Java运行环境  JVM:java虚拟机 java的基本类型有 整形,浮点型,字符

java学习随笔(三)

java源文件的命名规则 通常情况下,java源文件的主文件名是可以任意的.但是如果java程序里定义了一个public类,则该源文件的主文件名必须与该public类的类名相同.由于java程序源文件的的文件名必须与public类的类名相同,所以一个java源文件只能定义一个public类. 通常有如下建议: 一个java源文件只定义一个类,不同的类使用不同的源文件定义. 让java源文件的主文件名与该源文件中定义的public类同名.

Java学习随笔2:Java复合赋值表达式的小问题

问题:i += j只是i = i + j的简写么? 答案:非也!看下面的程序: int i = 5; long j = 8; i += j; // 可以通过编译且结果正确 i = i + j; // 无法通过编译,类型转换问题 其实,Java会将i += j转换为i = (int)(i + j)来执行. 通常,一个E1 op= E2形式的复合赋值表达式,等价于E1 = (T)((E1) + (E2)),T即为E1的类型. ps:Java如何生成一个区间的整数(如100-200)? 答: publ

java学习随笔(一)

下载和安装: 下载JDK双击安装,系统默认安装在C:\Program Files\Java目录下,但是不推荐安装在此目录下,建议直接安装在根目录下,如D:\Java 设置环境变量: 在“计算机”右键   “属性”菜单选择  “高级系统设置”选项中的“高级”--“环境变量”.添加环境变量名JAVA_HOME,设置变量值为JDK安装路径:如C:\Java\jdk8 添加环境变量名PATH,设置变量值为:例如:%JAVA_HOME%\bin     其中JAVA_HOME即为JDK安装路径.(wind

Java学习随笔之一: Java 语言概述和开发环境

Java SDK 下载: http://www.oracle.com/technetwork/java/javase/downloads/index.html 默认安装路径:C:\Program Files\Java 添加环境变量 for java 和 javac, 路径: C:\Program Files\Java\jdk1.8.0_101\bin 编译java 命令:   javac -d  java文件路径    (将会生成同名的 .class文件) 运行java命令:   java ja