方法都比较简单,这里列出来即可:

  • add(index,ele) //忘制定下标插入元素
  • add(ele)
  • addAll(Collection <C> c) 泛型必须与调用add的泛型保持一致
  • set(index,ele)
  • remove(index)
  • remove(Object)
  • removeAll(Collection<C> c) 移除交集元素
  • get(index) 返回制定下标的元素
  • indexOf(Object o) 返回指定元素第一次出现所在的下标(正序)
  • lastIndexOf(Object o ) 返回指定元素第一次出现所在的下标(倒叙)
  • contains(Object) 是否包含某个元素
  • containsAll(Collection<C> c)是否包含某个集合
  • retainAll(Collection<C> c)保留两个集合的交集
  • toArray() 返回一个Object[]数组
  • clear() 清空集合

手写ArrayList

重点强调

  • ArrayList的底层是数组
  • 使用泛型
  • 删除元素的方法使用System.arraycopy()来覆盖原数组
package _20191209;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* 手写ArrayList v1.0
* 初始化、add、toString、get、remove方法
* @author TEDU
*
*/
public class MyArrayList<E> {
//成员变量
private Object[] datas;//底层数组
private static final int DEFAULT_CAPACITY = 10;//初始容量
private static int used = 0;//当前数组中已被填充的个数
private static int size = DEFAULT_CAPACITY;//数组实际大小
//初始化
public MyArrayList() {
datas = new Object[DEFAULT_CAPACITY];
}
public MyArrayList(int size) {//自定义容器大小
this.size = size;
datas = new Object[size];
}
//、add
public void add(E e) {
if(used < size) {
datas[used++] = e;
}else {
size += (size>>1);
datas = Arrays.copyOf(datas,size);
}
}
//、toString
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("[");
// for(Object o : datas) {
// sb.append(o+",");
// }
for (int i = 0; i < used; i++) {
if(i!=used-1) {
sb.append(datas[i]+",");
}else {
sb.append(datas[i]);
}
}
sb.append("]");
return sb.toString();
} //、get
public E get(int index) {
return (E) datas[index];
} //set
public boolean set(int index,E element) {
if(index >= used) {
return false;
}
datas[index] = element;
return true;
} //、remove方法,移除后used要减一
public boolean remove(int index) {
if(index >= used) {
return false;
}
//使用arrycopy很方便
System.arraycopy(datas, index+1, datas, index, (used--)-index);
return true;
}
public boolean remove(E element) {
for (int i = 0; i < used; i++) {
if(((E)datas[i]).equals(element)) {
remove(i);
return true;
}
}
return false;
} //indexOf 返回第一个匹配的元素所在下标,如元素不存在返回-1
public int indexOf(E element) {
for (int i = 0; i < used; i++) {
if(((E)datas[i]).equals(element)) {
return i;
}
}
return -1; } //lastIndexOf
public int lastIndexOf(E element) {
for (int i = used-1; i >= 0; i--) {
if(((E)datas[i]).equals(element)) {
return i;
}
}
return -1;
} //size返回集合大小
public int size() {
return used;
} //clear 清空集合
public void clear() {
datas = new Object[DEFAULT_CAPACITY];
used = 0;
} //测试
public static void main(String[] args) {
MyArrayList<Integer> ml = new MyArrayList<>();
// Scanner scan = new Scanner(System.in);
// String str = "";
// while(!str.contentEquals("-1")) {//输出-1推出循环
// System.out.println("请添加:");
// str = scan.nextLine();
// if(str.contentEquals("-1")) return;
// ml.add(str);
// System.out.println(ml);;
// }
//手写版ArrayList
System.out.println("----------手写版ArrayList---------------");
ml.add(123);
ml.add(12);
System.out.println(ml);
System.out.println(ml.size());
ml.set(1, 33);
System.out.println(ml);
ml.remove(1);
System.out.println(ml);
ml.add(66);
ml.add(13);
System.out.println(ml);
ml.remove((Integer)66);//直接输入66会被认为是下标66的元素
System.out.println(ml);
System.out.println(ml.indexOf((Integer)123));
ml.add(123);
System.out.println(ml.lastIndexOf((Integer)123));
ml.clear();
System.out.println(ml);
System.out.println(ml.size()); //正版ArrayList测试
System.out.println("---------------以下为正版ArrayList-----------------");
List<Integer> arrayList = new ArrayList<>();
arrayList.add(123);
arrayList.add(12);
System.out.println(arrayList);
System.out.println(arrayList.size());
arrayList.set(1, 33);
System.out.println(arrayList);
arrayList.remove(1);
System.out.println(arrayList);
arrayList.add(66);
arrayList.add(13);
System.out.println(arrayList);
arrayList.remove((Integer)66);//直接输入66会被认为是下标66的元素
System.out.println(arrayList);
System.out.println(arrayList.indexOf((Integer)123));
arrayList.add(123);
System.out.println(arrayList.lastIndexOf((Integer)123));
arrayList.clear();
System.out.println(arrayList);
System.out.println(arrayList.size()); }
}

  

  

44 容器(三)——ArrayList索引相关方法的更多相关文章

  1. Lucene.Net 2.3.1开发介绍 —— 三、索引(五)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(五) 话接上篇,继续来说权重对排序的影响.从上面的4个测试,只能说是有个直观的理解了.“哦,是!调整权重是能影响排序了,但是好像没办法来 ...

  2. Lucene.Net 2.3.1开发介绍 —— 三、索引(四)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个 ...

  3. SQL优化(三)—— 索引、explain分析

    SQL优化(三)—— 索引.explain分析   一.什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据 ...

  4. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  5. Lucene.Net 2.3.1开发介绍 —— 三、索引(七)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(七) 5.IndexWriter 索引这部分最后讲的是IndexWriter.如果说前面提到的都是数据的结构,那么IndexWriter ...

  6. Lucene.Net 2.3.1开发介绍 —— 三、索引(六)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(六) 2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点.怎么理解这个点呢 ...

  7. Lucene.Net 2.3.1开发介绍 —— 三、索引(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...

  8. Lucene.Net 2.3.1开发介绍 —— 三、索引(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...

  9. Lucene.Net 2.3.1开发介绍 —— 三、索引(一)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引? 先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string ...

随机推荐

  1. Python爬虫 | IP池的使用

    一.简介 - 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需 ...

  2. Redis存储字符串

    1.set和get实现字符串存取: 键的名字相同,会对以前的值进行覆盖: 2.++操作: 3.--操作: 4.加任意数值的数字: 5.减任意数值的数字: 6.拼接字符串: 7.删除:

  3. rpmlint 方便的rpm spec 以及rpm 文件检查工具

    rpmlint 可以方便的让我们检查rpm spec 的信息,给予我们提示以及改进,同时也支持对于rpm 文件处理 安装 yum install -y rpmlint 使用 spec 检查 rpmli ...

  4. 利用 PHP CURL zip压缩文件上传

    $postData['file'] = "@".getcwd()."/../attachment/qianbao/{$customer_id}.zip"; $t ...

  5. CSPS_112

    这是Dybala神的差点AK场, 可我T2读入写挂&&T3上届算错没有AK 如果这是C... T1 xjb猜了个结论就过对拍 T2 topsort好题 T3 各险绅嗵的一个dp 我打的 ...

  6. Theano入门笔记2:scan函数等

    1.Theano中的scan函数 目前先弱弱的认为:相当于symbolic的for循环吧,或者说计算图上的for循环,也可以用来替代repeat-until. 与scan相比,scan_checkpo ...

  7. Truncate使用注意事项

    1.TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志 ...

  8. Hadoop 在启动或者停止的时候需要输入yes确认问题

    启动或者停止hadoop的时候,信息如下: Stopping namenodes on [hadoop1 hadoop2] The authenticity of host 'hadoop2 (172 ...

  9. maven 私服上有jar包但是却下载不下来

    解决办法: 在parent中执行deploy命令就解决了. 原因:第一次建项目,上传jar包的时候直接进入到该项目中进行deploy到私服.最终发现私服仓库有,但是别人引用的时候无法下载.是因为别人下 ...

  10. vooya --- a YUV player and a generic raw data player

    vooya是一个raw数据播放器,可播放yuv数据,兼容win.linex以及mac平台. 下载地址:https://www.offminor.de/(见最下面) ubuntu需要安装依赖: apt ...