什么是List集合:

特点:

  • 元素有序可重复的集合。
  • 集合中每个元素都有其对应的顺序索引。
  • List集合默认按元素的添加顺序设置元素的索引,索引从0开始。
 
List接口的常用方法:
List可以使用Collection的所有方法。但是List也有自己的一些方法。
  • 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():

除了继承Collection接口的iterator()方法,List还提供了一个listIterator()方法,该方法返回一个ListIterator()对象。ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator在Iterator的基础上增加了三个方法:
  • 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: 长度不可变

我们还可以用Arrays.asList来创建一个List
List persons = Arrays.asList("李一桐", "刘亦菲", "鞠婧祎"); persons.forEach(person -> System.out.println(person));

persons.add("易烊千玺"); //这行代码直接报错
 
这个List是一个ArrayList,但是我们要注意,这个是Arrays类里面一个叫做ArrayList的内部类,不是我们前面学的java.util包下面的ArrayList。这个List长度是固定不可变的。如果我们调用add方法添加元素,直接抛出异常。
 
 

java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();的更多相关文章

  1. java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);

    java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...

  2. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  3. Java 数据类型:集合接口Collection之Set接口HashSet类;LinkedHashSet;TreeSet 类

    Collection 之 Set 实现类: HashSet TreeSet 特点: 无序. 元素不可重复. (如果试图添加一个已经有的元素到一个Set集合中,那么会添失败,add()方法返回false ...

  4. Java:集合,Collection接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  5. java学习——集合框架(Collection,List,Set)

    集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存储基本数据类型值. ...

  6. java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  7. JAVA 常用集合接口List、Set、Map总结

    java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...

  8. [Java复习] 集合框架 Collection

    Q1 Collection java的集合以及集合之间的继承关系? 数组和链表的区别? 固定长度,连续内存,不能扩展,随机访问快,插入删除慢.链表相反 List, Set, Map的区别? List, ...

  9. 【Java】集合概述Collection、Map

    Java集合分为Collection和Map,Collection又分为List.Set. List中有ArrayList.LinkedList和Vector:Set中又分为HashSet和TreeS ...

随机推荐

  1. Swagger2简单使用教程

    Swagger2简单使用教程 1.简介 ​ Swagger是为了解决企业中接口(api)中定义统一标准规范的文档生成工具.很多采用前后端分离的模式,前端只负责调用接口,进行渲染,前端和后端的唯一联系, ...

  2. LOJ #6207 - 米缇(杜教筛+拉格朗日插值)

    LOJ 题面传送门 首先将 \(\sigma_k(ij)\) 展开: \[\sigma_k(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp ...

  3. [转载]CSP-J/S 第一轮知识点选讲

    CSP-J/S 第一轮知识点选讲 转载自这里 感谢原博主的大力整理! 信息学史及基本知识 一.信息学及计算机史 计算机的顶级奖项:图灵奖.冯·诺依曼奖 图灵奖:由ACM(美国计算机协会)设立于1966 ...

  4. MongoDB 安装/启动/基本操作命令

    1.MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系型数据库和非关系数据库之间的 ...

  5. Latex 文档格式化

    title: "Latex 文档格式化" author: 李龙翔 date: "Nov 22, 2019" subject: "Markdown&qu ...

  6. springboot与数据访问之jdbc

    官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter 添加依 ...

  7. shell命令行——快捷键

    生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向) ...

  8. 【模板】有源汇有上下界最大流(网络流)/ZOJ3229

    先导知识 无源汇有上下界可行流 题目链接 https://vjudge.net/problem/ZOJ-3229 https://www.luogu.com.cn/problem/P5192 (有改动 ...

  9. 技术管理进阶——Leader的模型、手段及思维

    这里可以添加关注交流一下嘛-- 本文更多的是个人认知,有不足请批评. ​Case 在之前一次年底考评的时候,有一位leader将一个案例同时用到了自己和下属身上,老板发出了责问: 这个项目到底你是负责 ...

  10. abandon, aboard, abolish

    abandon Abandon is a 2002 American psychological thriller drama film [惊悚片] ... Waiting for Handler o ...