java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();
什么是List集合:
特点:
- 元素有序可重复的集合。
- 集合中每个元素都有其对应的顺序索引。
- List集合默认按元素的添加顺序设置元素的索引,索引从0开始。
- void add(int index, Object element) : 将元素element插入到List集合的index处
- boolean addAll(int index, Collection c) : 将集合C包含的所有元素都插入到List集合的index处
- Object get(int index) : 返回集合index索引处的元素
- int indexOf(Object o) : 返回对象o在List集合中第一次出现的位置
- Object remove(int index): 删除并返回index索引处的元素
- Object set (int index, Object element) : 将index索引处的元素替换为element对象,返回被替换的旧元素。
- List subList(int fromIndex, int toIndex): 返回从fromIndex(包含)到索引toIndex(不包含)处所有集合元素的自己和。
- void replaceAll(UnaryOperator operator):根据operator指定计算规则重新设置List集合中的所有元素(java8+)。
- void sort(Comparator c) : 根据Comparator参数对List集合的元素排序。
remove移除
移除指定下标或相同对象(对象的equal方法判断)的第一个元素;有限精确匹配,传入数字优先判断下标
原理:List在remove的时候,就是调用equals方法来判断两个元素是否相等的,并且是调用remove方法参数的equals:
import java.util.ArrayList; /**
* @ClassName ArrayListRemoveExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayListRemoveExample {
private static class TestObj{
@Override
public boolean equals(Object obj) {
return true;
}
}
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("赵六");
System.out.println(arrayList);
arrayList.remove(1); //精确匹配原则,数字优先匹配下标
arrayList.remove("王五"); //其次匹配对象
System.out.println(arrayList); //测试移除原理,是调用需要移除对象的equal方法判断是否和已有元素相等
arrayList.remove(new TestObj());
System.out.println(arrayList); //张三被移除
}
}
replaceAll处理数据并改变原有值
import java.util.ArrayList;
import java.util.function.UnaryOperator; /**
* @ClassName ArrayListReplaceAllExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayListReplaceAllExample {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
//数据处理
arrayList.replaceAll( o -> {
int tmpNum = (int)o;
return tmpNum * tmpNum;
});
System.out.println(arrayList); //[1, 4, 9]
}
}
sort对ArrayList集合内元素重新排序
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.NavigableMap; /**
* @ClassName ArrayListSortExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayListSortExample {
public static void main(String[] args) {
List nums = new ArrayList();
nums.add(3);
nums.add(2);
nums.add(4);
nums.add(1);
System.out.println(nums); //[3, 2, 4, 1]
//自定义排序
nums.sort(new Comparator() {
@Override
public int compare(Object o, Object t1) {
return (int)o - (int)t1;
}
});
System.out.println(nums); //[1, 2, 3, 4]
nums.sort((o1, o2) -> (int)o2 - (int)o1); //lambda方式
System.out.println(nums); //[4, 3, 2, 1]
}
}
List迭代器listIterator():
- boolean hasPrevious() : 返回迭代器关联的结合是否还有上一个元素
- boolean previous(): 返回迭代器的上一个元素
- void add(Object o): 在当前游标所在位置插入一个元素
import java.util.ArrayList;
import java.util.ListIterator; /**
* @ClassName ArrayListListIteratorExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayListListIteratorExample {
public static void main(String[] args) {
ArrayList persons = new ArrayList();
persons.add("张三");
persons.add("李四");
persons.add("王五");
ListIterator listIteratorPersons = persons.listIterator();
listIteratorPersons.add("赵六"); //游标位置0
System.out.println(persons);//[赵六, 张三, 李四, 王五]
while (listIteratorPersons.hasNext()){
System.out.println(listIteratorPersons.next());
}
listIteratorPersons.add("赵六");//游标位置: 对象.length-1
System.out.println(persons); //[赵六, 张三, 李四, 王五, 赵六]
}
}
Arrays.ArrayList: 长度不可变
List persons = Arrays.asList("李一桐", "刘亦菲", "鞠婧祎"); persons.forEach(person -> System.out.println(person));
persons.add("易烊千玺"); //这行代码直接报错
java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();的更多相关文章
- java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);
java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- Java 数据类型:集合接口Collection之Set接口HashSet类;LinkedHashSet;TreeSet 类
Collection 之 Set 实现类: HashSet TreeSet 特点: 无序. 元素不可重复. (如果试图添加一个已经有的元素到一个Set集合中,那么会添失败,add()方法返回false ...
- Java:集合,Collection接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- java学习——集合框架(Collection,List,Set)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存储基本数据类型值. ...
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- JAVA 常用集合接口List、Set、Map总结
java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...
- [Java复习] 集合框架 Collection
Q1 Collection java的集合以及集合之间的继承关系? 数组和链表的区别? 固定长度,连续内存,不能扩展,随机访问快,插入删除慢.链表相反 List, Set, Map的区别? List, ...
- 【Java】集合概述Collection、Map
Java集合分为Collection和Map,Collection又分为List.Set. List中有ArrayList.LinkedList和Vector:Set中又分为HashSet和TreeS ...
随机推荐
- Linux远程软件
Xhell6:Linux的终端模拟软件 1>安装并破解:解压.破解(运行两个.bat文件).启动(点击Xshell.exe文件) 2>连接远端Linux系统: 创建会话:点击连接,在常规框 ...
- 洛谷 P4621 - [COCI2012-2013#6] BAKTERIJE(exCRT)
洛谷题面传送门 发篇正常点的题解. 首先对于这样的题暴力枚举肯定是不行的,因为最小时间显然可能达到 \((4nm)^5\approx 10^{20}\),就算数据很难卡到这个上界,构造出一些使你暴力超 ...
- Linux 安装和使用 RAR工具
RAR 安装 方法一.通过apt命令安装 rar 和 unrar 未安装 unrar 的情况下,提取 RAR 文件会报出"未能提取"错误 Ubuntu 安装 rar和 unrar( ...
- EXCEL——排序函数RANK,6种花式使用技巧
我们在实际工作中,常常把RANK函数用于对一列数据的基本排序,即从大到小的排序方法,那你还知道它的其他什么用法吗? 今天就给大家系统的分享下RANK函数的用法,分享的内容主要为以下这6种技巧. 1.升 ...
- 使用Docker编译OpenResty支持国密ssl加密
编译环境 执行编译操作环境如下 #操作系统 CentOS Linux release 7.4.1708 (Core) #docker版本 Version: 19.03.5 编译过程 Dockerfil ...
- 线性表A,B顺序存储合并
线性表A,B顺序存储合并 有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素.元素类型为整型 输入格式: 第一行输入输入表A的各 ...
- 学习java 6.29
今天是学习Java的第一天. 学习内容:了解了JDK的下载和安装: 学会了如何配置Path环境变量及安装eclipse: 执行了HelloWorld案例: 在Java中关键字需要小写,Java中最基本 ...
- netty系列之:手持framecodec神器,创建多路复用http2客户端
目录 简介 配置SslContext 客户端的handler 使用Http2FrameCodec Http2MultiplexHandler和Http2MultiplexCodec 使用子channe ...
- Oracle——创建存储过程
有个超级详细的关于存储过程的帖子:https://www.cnblogs.com/snowballed/p/6766867.html Oracle-存储过程(procedure.function.pa ...
- mysql 5.7 压缩包安装教程
前言 : 避免之前装的MySQL影响 首先进入dos窗口执行 sc delete mysql 删除已有的mysql服务 (一) 下载MySQL5.7 版本压缩包 网址 https://de ...
