JAVA SE ArrayList 底层实现
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 底层实现的更多相关文章
- Java——ArrayList底层源码分析
1.简介 ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔, 当数组大小不满足时需要增加存储能力,就要将已经有数 ...
- Java SE教程
第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石 代码要十份规范 笔记要认真详实 一.java内容介绍 ...
- Java SE基础知识
Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...
- Java复习总结(二)Java SE 面试题
Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...
- Java SE 8 新增特性
Java SE 8 新增特性 作者:Grey 原文地址: Java SE 8 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new_ ...
- 初涉java库--ArrayList
我的车就差一个轮子啦,造好轮子,我就飞上天与太阳肩并肩啦,想想都激动.什么你要自己造轮子,是不是傻,商店里不都是别人造好的吗,又好又方便,只需一点money,你没有money,那你只能做个安静的美男子 ...
- Java Se : Java NIO(服务端)与BIO(客户端)通信
Java目前有三种IO相关的API了,下面简单的说一下: BIO,阻塞IO,最常用的Java IO API,提供一般的流的读写功能.相信学习Java的人,都用过. NIO,非阻塞IO,在JDK1.4中 ...
- java 16-2 ArrayList的练习2
需求:去除集合中自定义对象的重复值(对象的成员变量值都相同 注意: 我们按照和字符串一样的操作,发现出问题了. 为什么呢? 我们必须思考哪里会出问题? 通过简单的分析,我们知道问题出现在了判断上. ...
- Java API —— ArrayList类 & Vector类 & LinkList类
1.ArrayList类 1)ArrayList类概述 · 底层数据结构是数组,查询快,增删慢 · 线程不安全,效率高 2)ArrayList案例 ...
随机推荐
- jumpserver堡垒机安装
1. 下载jumpserver cd /opt wget https://github.com/jumpserver/jumpserver/archive/master.zip unzip maste ...
- scrapy_novel_python
# _*_ coding:UTF _8_ from bs4 import BeautifulSoup import requests,sys class downloader(object): def ...
- jdbc --例子7
package cn.kitty.o1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLE ...
- Mongo第三个参数的用法
Mongo update的用法 Update( array $criteria , array $new_object [, array $options = array() ] ) 第一个参数是条件 ...
- MyEclipse/Eclipse快捷键总结
MyEclipse/Eclipse快捷键 查找某个方法被谁调用:选中方法名,ctrl+shift+g 通过文件名称查找类或文件:ctrl+shift+r(Open Resource)
- 保存canvas
http://www.crazybunqnq.com/2018/09/01/PythonSeleniumSaveCanvas/ http://www.webhek.com/post/save-canv ...
- MySQL半同步安装以及参数
MySQL半同步安装以及参数 基于MySQL5.5 官档地址: Semisynchronous Replication Administrative Interface https://dev.mys ...
- php 阳历转农历优化版
网上转换方法很多例子错误. 测试例子1:输入公历 2010年2月1号测试,对比百度万年历 农历应该为己丑年(2009)腊月(12月)十八. 测试例子2:输入农历1990.11.初十,丑时,公历应该为1 ...
- fjwc2019 D2T2 定价 (栈+set+贪心)
#182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位, ...
- 从技术专家到管理者的思路转变(V1)
作为技术专家出身的管理者,是一种优势(你所做的很多决策可能比非技术出身的管理者更加具有可行性和性价比).也是一种劣势(你可能会过于自恋自己的技术优势).这取决于你在接下去的职业生涯中,如何取舍你的技术 ...