44 容器(三)——ArrayList索引相关方法
方法都比较简单,这里列出来即可:
- 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索引相关方法的更多相关文章
- Lucene.Net 2.3.1开发介绍 —— 三、索引(五)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(五) 话接上篇,继续来说权重对排序的影响.从上面的4个测试,只能说是有个直观的理解了.“哦,是!调整权重是能影响排序了,但是好像没办法来 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个 ...
- SQL优化(三)—— 索引、explain分析
SQL优化(三)—— 索引.explain分析 一.什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据 ...
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(七) 5.IndexWriter 索引这部分最后讲的是IndexWriter.如果说前面提到的都是数据的结构,那么IndexWriter ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(六) 2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点.怎么理解这个点呢 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(三)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(二)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(一)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引? 先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string ...
随机推荐
- 洛谷 P3958 奶酪 题解
思路: 先看哪两个点能互通,再广搜寻找下一步,如果到达高度h就输出Yes,如果所有路径都找过都不能到达高度h就输出No. #include<bits/stdc++.h> using nam ...
- 【洛谷P4585】 [FJOI2015]火星商店问题 线段树分治+可持久化trie
感觉这个线段树分治和整体二分几乎相同啊~ code: #include <bits/stdc++.h> #define MAX 100300 #define ll long long #d ...
- ubuntu 基于windows
windows10下的ubuntu子系统 wsl windows server linux ubuntu在微软商店可下载,安装好之后配置一个用户名和密码,默认的root用户时没有密码的.需要使用roo ...
- CF 768B
CF 768B题意:In each operation Sam must remove any element x, such that x>1, from the list and inser ...
- 《RabbitMQ 实战》读书笔记
MQ的好处: 1.业务上接口(系统扩展性变强) 2.性能提升(同步变异步,效率提高,还方便做负载均衡) 3.技术兼容(可以连接各种不同语言的系统,作为粘合剂) 读书笔记: 1.消息队列的应用场景:系统 ...
- 60、Spark Streaming:缓存与持久化机制、Checkpoint机制
一.缓存与持久化机制 与RDD类似,Spark Streaming也可以让开发人员手动控制,将数据流中的数据持久化到内存中.对DStream调用persist()方法,就可以让Spark Stream ...
- gulp开发工具之postcss
参考文章:http://www.cnblogs.com/givebest/p/4771154.html package.json { "name": "postcss&q ...
- Spyder汉化问题
首先感谢李增海大神,以下内容来源于http://www.lizenghai.com 必备条件 1.已安装Spyder 2.Spyder版本在3.X以上 Spyder安装: 1.anaconda下,co ...
- gitlab备份恢复
1.Gitlab 创建备份1.1 创建备份文件 首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创 ...
- spring boot读取Excel
首先引入相关依赖 <!--解析office相关文件--> <dependency> <groupId>org.apache.poi</groupId> ...