Java实现ArrayList
说明都在注释:
package adt.array; import java.util.Iterator;
import java.util.NoSuchElementException; /**
*
* @author 数据结构与算法分析
* @param <T> AnyType T 任何类型
*/
public class MyArrayList<T> implements Iterable<T>{ //集合初识长度
private static final int DEFAULT_CAPACITY = 10; //当前List数据长度
private int theSize; //底层数组集合
private T[] theItems; //长度
public int size() {
return theSize;
} //List判空
public boolean isEmpty() {
return size() == 0;
} /***
* 扩充长度
*/
public void trimToSize() {
ensureCapacity(size());
} /***
*根据下标获取数据,如果下标为负数或大于当前数组长度,抛出数组越界异常。
* @param idx
* @return
*/
public T get(int idx) {
if(idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
return theItems[ idx ];
} //初始化
public MyArrayList() {
doClear();
} //清除长度,将当前集合长度变为初始值
private void doClear() {
theSize = 0;
ensureCapacity(DEFAULT_CAPACITY);
} /***
* 如果当前需要扩充的长度小于当前数组长度,那么程序将不往下执行
* 否则获取当前数组,创造新的数组,新的数组长度根据newCapacity进行初始化,
* 然后将旧的数组赋给新的数组
* @param newCapacity
*/
@SuppressWarnings("unchecked")
private void ensureCapacity(int newCapacity) {
if(newCapacity < theSize)
return; T[] old = theItems; theItems = (T []) new Object[ newCapacity ];
for(int i = 0; i < size(); i++)
theItems[i] = old[i];
} //清空集合
public void clear() {
doClear();
} /**
* 更新数据,根据下标,判断下标是否越界,接着根据下标获取当前下标的数据进行覆盖
* @param idx
* @param newVal
* @return
*/
public T set(int idx, T newVal) {
if(idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
T old = theItems[ idx ];
theItems[idx] = newVal;
return old;
} //添加一个数据,在最后
public boolean add(T x) {
add(size(), x);
return true;
} /**
* 在上一个add方法中将数组长度传入,如果当前长度满了,那么扩充一倍(+1用于大小是0的情况)
* 接着将所有数据向后移一位,将输入插入到第一位index0,长度自增。
* @param idx
* @param x
*/
public void add(int idx,T x) { if(theItems.length == size())
ensureCapacity(size()*2+1); for(int i = theSize; i > idx; i--)
theItems[i] = theItems[i-1]; theItems[idx] = x; theSize++;
} /**
* 都差不多
* @param idx
* @return
*/
public T remove(int idx) {
T removeItem = theItems[idx];
for(int i = idx; i < size() -1; i++)
theItems[ i ] = theItems[ i +1 ]; theSize--;
return removeItem;
} //实现迭代器
@Override
public Iterator<T> iterator() {
return new ArrayListIterator();
} //具体实现
private class ArrayListIterator implements Iterator<T>{ private int current = 0; @Override
public boolean hasNext() {
return current < size();
} @Override
public T next() {
if(!hasNext())
throw new NoSuchElementException();
return theItems[current ++];
} public void remove() {
MyArrayList.this.remove(-- current);
}
} }
package adt.array; public class MainTest {
//简单测试
public static void main(String[] args) {
MyArrayList<String> myArrayList = new MyArrayList<>();
for(int i = 0; i < 100; i++) {
myArrayList.add(RandomStr());
} myArrayList.forEach(str->{
System.out.println(str);
});
} public static String RandomStr() {
String strArr = "QaWsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM";
return strArr.substring((int)(Math.random()*strArr.length()));
} }
输出:
yHuJiKopLZzxXcCVbBbNnmM
cCVbBbNnmM
NnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
AeDrFGyHuJiKopLZzxXcCVbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
yHuJiKopLZzxXcCVbBbNnmM
LZzxXcCVbBbNnmM
sEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
QaWsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
jIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
UjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
AeDrFGyHuJiKopLZzxXcCVbBbNnmM
qPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
gYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
zxXcCVbBbNnmM
M
zxXcCVbBbNnmM
BbNnmM
iKopLZzxXcCVbBbNnmM
fTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
KopLZzxXcCVbBbNnmM
BbNnmM
ZzxXcCVbBbNnmM
bNnmM
JiKopLZzxXcCVbBbNnmM
gYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
pLZzxXcCVbBbNnmM
lqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
CVbBbNnmM
ZzxXcCVbBbNnmM
qPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
BbNnmM
dRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
eDrFGyHuJiKopLZzxXcCVbBbNnmM
YhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
gYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
EdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
KopLZzxXcCVbBbNnmM
TgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
UjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
PwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
JiKopLZzxXcCVbBbNnmM
M
YhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
WsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
HuJiKopLZzxXcCVbBbNnmM
iKopLZzxXcCVbBbNnmM
uJiKopLZzxXcCVbBbNnmM
gYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
LZzxXcCVbBbNnmM
nmM
xXcCVbBbNnmM
uJiKopLZzxXcCVbBbNnmM
WsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
XcCVbBbNnmM
rFGyHuJiKopLZzxXcCVbBbNnmM
opLZzxXcCVbBbNnmM
QaWsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
IkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
HuJiKopLZzxXcCVbBbNnmM
mM
bNnmM
BbNnmM
bNnmM
KopLZzxXcCVbBbNnmM
GyHuJiKopLZzxXcCVbBbNnmM
CVbBbNnmM
uJiKopLZzxXcCVbBbNnmM
EdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
WsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
CVbBbNnmM
fTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
lqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
mM
NnmM
dRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
BbNnmM
QaWsEdRfTgYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
VbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
DrFGyHuJiKopLZzxXcCVbBbNnmM
cCVbBbNnmM
LZzxXcCVbBbNnmM
OlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
NnmM
PwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
KopLZzxXcCVbBbNnmM
NnmM
GyHuJiKopLZzxXcCVbBbNnmM
CVbBbNnmM
HuJiKopLZzxXcCVbBbNnmM
wAeDrFGyHuJiKopLZzxXcCVbBbNnmM
XcCVbBbNnmM
wAeDrFGyHuJiKopLZzxXcCVbBbNnmM
gYhUjIkOlqPwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
PwAeDrFGyHuJiKopLZzxXcCVbBbNnmM
Java实现ArrayList的更多相关文章
- 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题
一.背景 最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@ResponseBody注解进行返回Lis ...
- java 遍历arrayList的四种方法
package com.test; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public ...
- 初涉java库--ArrayList
我的车就差一个轮子啦,造好轮子,我就飞上天与太阳肩并肩啦,想想都激动.什么你要自己造轮子,是不是傻,商店里不都是别人造好的吗,又好又方便,只需一点money,你没有money,那你只能做个安静的美男子 ...
- java集合-- arraylist小员工项目
import java.io.*; import java.util.ArrayList; public class Emexe { public static void main(String[] ...
- java 16-2 ArrayList的练习2
需求:去除集合中自定义对象的重复值(对象的成员变量值都相同 注意: 我们按照和字符串一样的操作,发现出问题了. 为什么呢? 我们必须思考哪里会出问题? 通过简单的分析,我们知道问题出现在了判断上. ...
- java 16-1 ArrayList的练习1
需求: ArrayList去除集合中字符串的重复值(去掉相同的字符串) 分析: 第一种做法:创建一个新的空集合: A:创建1个具有相同字符串的集合 B:创建1个空的集合 C:遍历第一个集合里面的元素 ...
- Java.util.ArrayList详解
java.util.ArrayList就是传说中的动态数组. 继承了关系,有此可看出ArrayList与list的collection的关系 public class ArrayList<E&g ...
- Java基础-ArrayList和LinkedList的区别
大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为Lin ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- JAVA中ArrayList用法
JAVA中ArrayList用法 2011-07-20 15:02:03| 分类: 计算机专业 | 标签:java arraylist用法 |举报|字号 订阅 Java学习过程中做题时 ...
随机推荐
- 12JDBC
1.JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java ...
- POJ 2104 区间第k大(主席树)
题目链接:http://poj.org/problem?id=2104 题目大意:给定还有n个数的序列,m个操作,每个操作含有l,r,k,求区间[l,r]第k大 解题思路:线段树只能维护序列的最大值最 ...
- [Tyvj1423]GF和猫咪的玩具(最短路)
[Tyvj1423]GF和猫咪的玩具 题目描述 GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1---n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同.GF左手拿起金 ...
- 程序员要注意!现在是RSS复兴的时候了
一般来说,现代网络不乏恐怖,从无所不在的网络黑客到所有信息平台,再到各大平台的评论系统.不幸的是,我们建立的这个互联网并没有什么灵丹妙药.但任何人都厌倦了黑箱算法,控制你在网上看到的东西,一直存在但始 ...
- 爬虫技术:从sougou网站访问微信公众号的过程
一:分析过程:fidder + chrome开发者工具 1:输入nba跳转的页面,每页显示10条相关公众号的信息 2:分析网站得到每条标题的详情页链接地址在: 3,请求上图中的url,会返回一段js代 ...
- Flask 之装饰器有关
- 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...
- hdu 1693 : Eat the Trees 【插头dp 入门】
题目链接 题意: 给出一个n*m大小的01矩阵,在其中画线连成封闭图形,其中对每一个值为1的方格,线要恰好穿入穿出共两次,对每一个值为0的方格,所画线不能经过. 参考资料: <基于连通性状态压缩 ...
- JavaScript 函数防抖
<!DOCTYPE html><html lang="zh-cmn-Hans"> <head> <meta charset="u ...
- python全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python理论知识,线程的创建)
昨日内容回顾 队列 队列:先进先出.数据进程安全 队列实现方式:管道+锁 生产者消费者模型:解决数据供需不平衡 管道 双向通信,数据进程不安全 EOFError: 管道是由操作系统进行引用计数的 必须 ...
- 【2019 Multi-University Training Contest 7】
01:https://www.cnblogs.com/myx12345/p/11653845.html 02: 03: 04: 05: 06:https://www.cnblogs.com/myx12 ...