Java ArrayList使用 Java新手教程之ArrayList的基本使用(IT技术)

您所在的位置:网站首页 arraylist Java ArrayList使用 Java新手教程之ArrayList的基本使用(IT技术)

Java ArrayList使用 Java新手教程之ArrayList的基本使用(IT技术)

2022-06-26 03:08| 来源: 网络整理| 查看: 265

想了解Java新手教程之ArrayList的基本使用的相关内容吗Yawn,在本文为您仔细讲解Java ArrayList使用的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java,arraylist使用,java中arraylist用法,java,arraylist排序下面大家一起来学习吧。 1.简介

ArrayList 是一个数组队列相当于 动态数组。与Java中的数组相比它的容量能动态增长。它继承于AbstractList实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

ArrayList 继承了AbstractList实现了List。它是一个数组队列提供了相关的添加、删除、修改、遍历等功能。

ArrayList 实现了RandmoAccess接口即提供了随机访问功能。RandmoAccess是java中用来被List实现为List提供快速访问功能的。在ArrayList中我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。

ArrayList 实现了Cloneable接口即覆盖了函数clone()能被克隆。

ArrayList 实现java.io.Serializable接口这意味着ArrayList支持序列化能通过序列化去传输。

和Vector不同ArrayList中的操作不是线程安全的!所以建议在单线程中才使用ArrayList而在多线程中可以选择Vector或者CopyOnWriteArrayList。

ArrayList是实现List接口的底层采用数组实现。

ArrayList 实现了Cloneable接口即覆盖了函数clone()能被克隆。

ArrayList 实现java.io.Serializable接口这意味着ArrayList支持序列化能通过序列化去传输。

方法:

2. 方法解释 (1)contains(Object o)

说明:判断该ArrayList中是否包含指定的内容。该方法内部调用indexOf()如果indexOf()可以查找到该内容返回true否则返回false。

注意:记得也要重写自定义类型的equals()方法。

private static void Test_contains(){ Persion p1 = new Persion("张三"); Persion p4 = new Persion("张12三"); Persion p2 = new Persion("张三3"); Persion p3 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p4); list.add(p2); System.out.println(list.contains(new Persion("张12三"))); } (2)lastIndexOf(Object o)

说明:查找给定元素最后一次的位置。也就是说 倒序查找该ArrayList中第一次出现给定元素的位置。存在返回具体的位置不存在返回-1。

实现:内容采用倒序遍历Object[]方式进行查找。

注意:与indexOf(Object o)方法描述的注意点一样都需要重写自定义类型的equals()方法。

private static void Test_laseIndexOf(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张12三"); Persion p3 = new Persion("张三3"); Persion p4 = new Persion("张三"); Persion p5 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); System.out.println(list.lastIndexOf(new Persion("张三"))); } (3) toArray()

说明:以Object[]形式返回ArrayList中存储的数据元素。

实现:返回的Object[]是采用Arrays.copyOf()(实际采用System.arraycopy())方式生成的一个"新数组"。

注意点:返回的Object[]中的数据应该是采用“浅拷贝”方式复制出来的。(也就是说,修改Object[]中元素的内容,ArrayList的内容也会发生改变)

private static void Test_toArray(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张12三"); Persion p3 = new Persion("张三3"); Persion p4 = new Persion("张三"); Persion p5 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); Object[] array = list.toArray(); System.out.println(Arrays.toString(array)); ((Persion)array[0]).name = "0000000"; ((Persion)array[2]).name = "2222222"; System.out.println(Arrays.toString(list.toArray())); } (4)toArray(T[] a)

说明:以给定的类型数组形式返回ArrayList中存储的数据元素。

注意:

1:返回的Object[]中的数据应该是采用“浅拷贝”方式复制出来的。(也就是说,修改Object[]中元素的内容,ArrayList的内容也会发生改变) 2:如果给定的数组类型与ArrayList存储的元素类型不匹配的话(给定的类型要是List中存储数据类型的父类型或者其本分)则会抛出"ArrayStoreException"。

原因:System.arraycopy()在做数组拷贝时如果发现类型不匹配时就会抛出ArrayStoreException。

private static void Test_toArray2(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张12三"); Persion p3 = new Persion("张三3"); Persion p4 = new Persion("张三"); Persion p5 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); AbsPersion[] array = list.toArray(new AbsPersion[]{}); System.out.println(Arrays.toString(array)); } (5)remove(Object o)

说明:删除ArrayList中与给定的元素“相等”的且第一次出现的元素。

注意:与indexOf(Object o)方法描述的注意点一样都需要重写自定义类型的equals()方法。

private static void Test_remove(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张12三"); Persion p3 = new Persion("张三3"); Persion p4 = new Persion("张三"); Persion p5 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); list.remove(new Persion("张12三")); System.out.println(Arrays.toString(list.toArray())); } (6)removeAll(Collection c)

说明:从当前ArrayList中删除指定集合中包含的所有元素。也就是说此方法会从ArrayList中删除其与给定集合的“相交”的数据。

private static void Test_removeAll(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张三"); Persion p3 = new Persion("李四"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); ArrayList list2 = new ArrayList(); list2.add(new Persion("张三")); list.removeAll(list2); System.out.println(Arrays.toString(list.toArray())); } (7)retainAll(Collection c)

说明:从该列表中删除未包含在指定集合中的所有元素。

也就是说此方法会移除非当前列表和给定列表共有的数据。执行此方法后该列表只会保留下其与给定列表的“交集”数据。

可以用于求 两个列表的交集。

private static void Test_retainAll(){ Persion p1 = new Persion("张三"); Persion p2 = new Persion("张三"); Persion p3 = new Persion("李四"); Persion p4 = new Persion("王五"); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); ArrayList list2 = new ArrayList(); list2.add(new Persion("张三")); list.retainAll(list2); System.out.println(Arrays.toString(list.toArray())); } (8)indexOf(Object o)

说明:返回ArrayList中第一次出现给定值的数组下标。如果不存在返回-1。

注意:

1:如果ArrayList中存储的是自定义类型需要重写equals()方法indexOf()内部会调用自定义类的equals()来判断要查找的内容与其中存储的数据元素是否“相等”。 2:如果不重写equals()方法则只有给定值的内存地址与ArrayList中的数据元素相等时才能返回其在ArrayList存储的位置就算内容一致也会返回-1标记ArrayList不存在给定内容。 3:“相等”这个概念不仅表示两个对象的内存地址一样还代表他们的“内容”相同。 private static void Test_indexOf(){ Persion p1 = new Persion("张三"); Persion p4 = new Persion("张12三"); Persion p2 = new Persion("张三3"); Persion p3 = new Persion("张三3"); ArrayList list = new ArrayList(); list.add(p1); list.add(p4); list.add(p2); System.out.println(list.indexOf(new Persion("张12三"))); } ....... private static class Persion{ String name; public Persion(String name) { this.name = name; } @Override public boolean equals(Object obj) { //Object的equals()默认实现是:采用“this==obj”来比较 “当前对象与给定对象指向的内存地址是否一致”。 //如果List中的元素不是String,Integr这些系统提供的类的话(这些系统类都重写了equals()),需要重写equals()方法。 //为什么要重写??如果不重写,当调用List的提供的系统方法时(例如indexOf()),这些方法可能会调用给定对象的equals() //来做相应判断如果给定的对象的内容相同但是对象在内存的存储地址不同时则会出现判断错误情况。 if(obj == null){ return false; } if(this == obj){ return true; } if(obj instanceof Persion){ Persion p = (Persion) obj; if(p.name == this.name){ return true; } if(p.name == null || this.name == null){ return false; } if(p.name.equals(this.name)){ return true; } } return false; } } 总结 相关文章Java比较对象的方式 Java各种比较对象的方式的对比总结Java Optional转换成List代码 Java Optional转换成LiJava运行时内存划分 Java运行时数据区域(内存划分)的深入讲解Java读取文件路径 Java中关于文件路径读取问题的分析java静态代理是什么 java静态代理的含义及用法Java正则表达式经纬度 Java正则表达式实现经纬度的合法性操作js超链接跳转 JavaScript 阻止超链接跳转的操作方法(多种写法)java异常处理 java实现统一异常处理的示例vue3使用vue-router vue3使用vue-router的完整步骤pandas读取CSV文件 Python pandas读取CSV文件的注意


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3