Array 查询效率高,增删效率低(

Link 增删效率高

Vector 线程安全

List 列表

源代码:

package com.littlepage.test;

/**
* 基于底层实现ArrayList
* @author Littlepage
* @reference bjsxt.com
*/
public class LittlePagesArrayList<E> {
// the array of element
private Object[] elementData;
private int size;// the size of SxtArrayList private static final int DEFALT_CAPACITY = ;// the initial capacity public LittlePagesArrayList() {
elementData = new Object[DEFALT_CAPACITY];
} public LittlePagesArrayList(int capacity) {// set the capacity of SxtArrayList
if (capacity < ) {
throw new RuntimeException("the capacity is negative");
} else if (capacity == ) {
elementData = new Object[DEFALT_CAPACITY];
} else {
elementData = new Object[capacity];
}
} public void add(E element) {
if (elementData.length == size) {
/**
* enlarge the capacity by 1.5 times
**/
Object[] newArray = new Object[elementData.length
+ (elementData.length >> )];
// use the system method copy the array
System.arraycopy(elementData, , newArray, , elementData.length);
elementData = newArray;
}
elementData[size++] = element;
} public E getElement(int index) {
checkRange(index);
return (E) elementData[index];// get element by index
} public void setElement(int index, E element) {
/**
* set element by index
*/
checkRange(index);
elementData[index] = element;
} public void removeElement(int index) {
/**
* remove by index
*/
int numMoved=elementData.length-index-;
if(numMoved>){
System.arraycopy(elementData, index+, elementData, index, numMoved);
}
elementData[size-]=null;
size--;
} public void removeElement(E element){
/**
* remove by element
*/
Object objElement=(Object)element;
for (int i=;i<size;i++) {
if(objElement.equals(elementData[i])){
removeElement(i);//remove by index
}
}
} public void checkRange(int index) {
/**
* check the index range
*/
if (index >= size || index < ) {
throw new IndexOutOfBoundsException(
"the index of SxtArrayList is out of Bounds:" + index);
}
} public int size(){
return size;
} public boolean isEmpty(){
return size==;
}
@Override
public String toString() {// the toString method
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i=;i<size;i++) {
sb.append(elementData[i] + ",");
}
sb.setCharAt(sb.length() - , ']');
return sb.toString();
} /**
* test method
*
* @param args
*/
public static void main(String[] args) {
LittlePagesArrayList s1 = new LittlePagesArrayList();
System.out.println(s1.isEmpty());
for (int i = ; i < ; i++) {
s1.add("littlepage"+i);
}
s1.removeElement();
s1.removeElement();
s1.removeElement("littlepage0");
System.out.println(s1.getElement());
System.out.println(s1);
System.out.println(s1.size());
System.out.println(s1.isEmpty());
} }

JAVA SE ArrayList 底层实现的更多相关文章

  1. Java——ArrayList底层源码分析

    1.简介 ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔, 当数组大小不满足时需要增加存储能力,就要将已经有数 ...

  2. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  3. Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...

  4. Java复习总结(二)Java SE 面试题

    Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...

  5. Java SE 8 新增特性

    Java SE 8 新增特性 作者:Grey 原文地址: Java SE 8 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new_ ...

  6. 初涉java库--ArrayList

    我的车就差一个轮子啦,造好轮子,我就飞上天与太阳肩并肩啦,想想都激动.什么你要自己造轮子,是不是傻,商店里不都是别人造好的吗,又好又方便,只需一点money,你没有money,那你只能做个安静的美男子 ...

  7. Java Se : Java NIO(服务端)与BIO(客户端)通信

    Java目前有三种IO相关的API了,下面简单的说一下: BIO,阻塞IO,最常用的Java IO API,提供一般的流的读写功能.相信学习Java的人,都用过. NIO,非阻塞IO,在JDK1.4中 ...

  8. java 16-2 ArrayList的练习2

      需求:去除集合中自定义对象的重复值(对象的成员变量值都相同 注意: 我们按照和字符串一样的操作,发现出问题了. 为什么呢? 我们必须思考哪里会出问题? 通过简单的分析,我们知道问题出现在了判断上. ...

  9. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

随机推荐

  1. python-数据分析与展示(Numpy、matplotlib、pandas)---1

    笔记内容整理自mooc上北京理工大学嵩天老师python系列课程数据分析与展示,本人小白一枚,如有不对,多加指正 1.ndarray对象的属性 .ndim..shape..size(元素个数,不是占用 ...

  2. MyEclipse如何配置Struts2源码的框架压缩包

    1.MyEclipse如何配置Struts2源码的框架压缩包 如本机的Struts2框架压缩包路径为:D:\MyEclipseUserLibraries\struts\struts-2.3.15.3- ...

  3. Linux的远程连接工具:SSH的安装

    在Linux执行命令很不方便,另外我们需要将自己计算机中的文件上传到Linux中,因此使用远程连接工具还是比较方便的. SSH安装 SSH的使用 打开安装好的软件:SSH Secure File Tr ...

  4. Storm学习笔记1:Storm基本组件

    Storm概念及组件 Nimbus:负责资源分配和任务调度. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程. Worker:运行具体处理组件逻辑的进程 ...

  5. VMware14安装centos7

    win10专业版 虚拟机:14 Pro 1. 新建虚拟机选择典型安装 2. 稍后安装操作系统 3. 选择Linux,版本选择centso7 64位(根据系统选择) 4. 设置虚拟机名称并选择安装位置 ...

  6. eclipse在注释时候字体变成繁体字

    输入法和java中的快捷键冲突了,按下ctrl+shift+F就切换回去了

  7. centos7 install rabbtimq

    yum install deltarpm erlang wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.8/rabbitmq- ...

  8. Django缓存系统

    在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...

  9. cmd copy命令 文件复制【转】

    本文转载自:https://www.jb51.net/article/18981.htm copy,中文含义为“复制”,一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目 ...

  10. 配置vim

    VundleVuldle是一个全自动的插件管理器,让我们通过维护插件列表的方式管理插件.它为安装.更新.删除插件提供了方便的命令.在安装Git的情况下(本文不赘述Git的安装),输入命令: git c ...