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 ...
随机推荐
- 函数(定义、参数、return、变量、作用域、预解析)
一.函数定义 1.方式一 function 函数名(参数){ 函数体 }——————函数声明的方法 function fn(a){ console.log(a); }: 2.方式二 ...
- CSS块元素、行内元素、行内块元素的转换
一.块元素转行内元素:display:inline 二.行内元素转块元素:display:block div{ display: inline; /*无效 width: 500px; height: ...
- CSS块元素
一.典型代表: Div h1-h6 p ul li 二.特点: 独占一行 可以设置宽高 嵌套(包含)下,子块元素宽度(没有定义情况下)和父块元素宽度默认一致. <style type=" ...
- linux系统管理——账号权限及归属管理练习
1.创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) 2.添加组帐号zonghe.caiwu.jishu,GID号分别设置为2001.2002.200 ...
- P2210 Haywire
P2210 Haywire 模拟退火练手题 #include<cmath> #include<ctime> #include<cstdio> #include< ...
- nodejs之mysql查询
示例代码中的mysql版本 2.14.1 参考代码 /** * 测试mysql连接 */ var mysql = require('mysql'); var connection = mysql.cr ...
- 如何防范web前端安全攻击
一.对于XSS防御: 1.不要信任任何外部传入的数据,针对用户输入作相关的格式检查.过滤等操作,以及转义字符处理.最普遍的做法就是转义输入输出的内容,对于括号,尖括号,斜杠进行转义 function ...
- 忽略 IDEA 文件
IntelliJ IDEA .idea *.iml /WebRoot/WEB-INF/classes
- Hyperspectral Image Classification Using Similarity Measurements-Based Deep Recurrent Neural Networks
用RNN来做像素分类,输入是一系列相近的像素,长度人为指定为l,相近是利用像素相似度或是范围相似度得到的,计算个欧氏距离或是SAM. 数据是两个高光谱数据 1.Pavia University,Ref ...
- [SNOI2019]纸牌
传送门 Description 有一副纸牌.牌一共有\(n\)种,分别标有 \(1,2,...,n\),每种有\(C\)张.故这副牌共有\(nC\)张. 三张连号的牌(\(i,i+1,i+2\))或三 ...