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 ...
随机推荐
- Greenplum常用的gp_toolkit & pg_catalog监控语句
gp_toolkit 说明 Greenplum数据库提供了一个名为gp_tooikit的管理schema,该schema下有关于查询系统目录,日志文件, 用户创建(databases,schema,t ...
- dbt 0.13.0 新添加特性sources 试用
dbt 0.13 添加了一个新的功能sources 我呢可以用来做以下事情 从基础模型的源表中进行数据选择 测试对于源数据的假设 计算源数据的freshness source 操作 定义source ...
- Lightning Web Components 来自salesforce 的web 组件化解决方案
Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...
- (转载)ranger原理
文章目录 一.业务背景 现状&&需求 二.大数据安全组件介绍与对比 1.Kerberos 2.Apache Sentry 3.Apache Ranger 4.为什么我们选择Ranger ...
- Node Addon
Node Addon as bridge between javascript and C++ #include <node.h> namespace HelloWorldDemo { u ...
- Mac php 装imagick扩展 菜鸟教程
1.2.直接brew install imagemagick@6完成安装 2.去http://pecl.php.net/package/imagick下载安装包 2.1.下载完后解压tar -xzvf ...
- gdal 根据条件选择数据
- python去除BOM头\ufeff等特殊字符
1.\ufeff 字节顺序标记 去掉\ufeff,只需改一下编码就行,把UTF-8编码改成UTF-8-sigwith open(file_path, mode='r', encoding='UTF-8 ...
- C#发起Http请求,调用接口
//方法1. Post 异步请求,普通的异步请求,传输普通的字符串等,对于有html代码的字段值的传输支持不好,如果需要传输html,二进制等数据的传输,请使用下面第二个方法,即使用UploadDat ...
- Ubuntu下root账户无法使用xshell远程连接解决方法
以前使用xshell连接服务器跑程序都很顺利,但这次整了一个root账户,发现居然连不上.百度一下,发现ubuntu系统本身是拒绝root账户远程连接的. 解决办法:参考点击传送门