IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 关于List集合的增删改等使用 -> 正文阅读

[数据结构与算法]关于List集合的增删改等使用

作者:language-java

准备:

目录

准备:

新增

排序

基本类型排序

引用类型排序

去重

分组

删除


  1. 平时开发中我们使用最多的便是ArrayList,所以就以ArrayList为例
  2. 在使用ArrayList的时候泛型要使用引用类型不可以使用int,shot这种基本类型

新增

  1. 新增时我们可以直接add,一个个的新增进去;也可以直接使用addAll方法,我们以将数组全部加入list为例。使用addAll方法;也可以在指定的位置插入我们想要的元素
            ArrayList<Integer> strings = new ArrayList<>();
            Integer[] arrays = {4, 3, 6, 5, 1};
            //新增元素
            strings.add(1);
            strings.addAll(Arrays.asList(arrays));
            System.out.println(strings);
            //指定位置新增元素
            strings.add(1, 22);
            System.out.println("指定位置插入" + strings);
  2. 输出结果
    [1, 4, 3, 6, 5, 1]
    指定位置插入[1, 22, 4, 3, 6, 5, 1]
    ?可以看到list集合中的数据是按照我们插入的顺序进行输出的,但是我们并不想要这样的顺序,我们可以将list集合按照我们自己想要的模式进行排序

排序

基本类型排序

基本类型排序非常简单,我们直接使用Java提供给我们的工具类就可以实现了

        Collections.sort(strings);
        System.out.println("排序后" + strings);
//-----------------------输出结果-------------------------------------
排序后[1, 1, 3, 4, 5, 6, 22]

引用类型排序

  1. 当然大部分时候我们的list中存放的都是引用类型,例如我们的user类等,这个时候使用工具类就不太好使了,因为他也不知道我们到底想要按照哪个属性进行排序
  2. 这个时候就需要我们自己去自定义了,我们可以将我们的实体类实现Comparable接口,并重写他的compareTo方法即可
package com.dataStructure;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

/**
 * @ProjectName: com.dataStructure
 * @author: ZhangBiBo
 * @description: list集合的排序
 * @data: 2022/1/13
 */
public class ListSort {
    public static void main(String[] args) {
       
 //------------------------list存一个对象排序-------------------------------------------------
        User user1 = new User(1);
        User user2 = new User(3);
        User user3 = new User(2);
        User user4 = new User(5);
        User user5 = new User(4);
        ArrayList<User> integers2 = new ArrayList<>();
        integers2.add(user1);
        integers2.add(user2);
        integers2.add(user3);
        integers2.add(user4);
        integers2.add(user5);
        System.out.println(integers2);
        Collections.sort(integers2);
        System.out.println(integers2);
    }
}
class User implements Comparable<User>{
    private Integer integer;

    public Integer getInteger() {
        return integer;
    }

    public User(Integer integer) {
        this.integer = integer;
    }

    public void setInteger(Integer integer) {
        this.integer = integer;
    }

    @Override
    public String toString() {
        return "User{" +
                "integer=" + integer +
                '}';
    }

    @Override
    public int compareTo(User o) {
        int i =this.integer-o.integer;
        return i;
    }
}
//------------------------输出结果-------------------------------------------
[User{integer=1}, User{integer=3}, User{integer=2}, User{integer=5}, User{integer=4}]
[User{integer=1}, User{integer=2}, User{integer=3}, User{integer=4}, User{integer=5}]

可以看到虽然我们的元素按照我们的想法进行了排序,但会存在重复的数据,这个时候我们可以对其进行去重操作

去重

去重的时候,有很多方式例如:借用hashSet进行去重;也可以循环遍历使用list的contains方法,找到重复的元素然后删除;

HashSet<Integer> set = new HashSet<>();
        set.addAll(strings);
        strings.clear();
        strings.addAll(set);
        System.out.println("去重后"+strings);
//----------------------输出结果----------------------
去重后[1, 3, 4, 5, 6, 22]
// 创建一个新的list集合,用于存储去重后的元素
List listTemp = new ArrayList();
// 遍历list集合
for (int i = 0; i < strings.size(); i++) {
	// 判断listTemp集合中是否包含list中的元素
	if (!listTemp.contains(list.get(i))) {
		// 将未包含的元素添加进listTemp集合中
		listTemp.add(list.get(i));
	}
}

在排好序之后我们还可以对其进行分组

分组

Map<String, List<Student>> collect = stuList.stream().collect(Collectors.groupingBy(Student::getInstitution));

最后再来看一个删除操作吧

删除

  1. 在删除的时候需要注意:在删除某个特定元素的时候可以使用for循环,增强for,迭代器中任意一种,但需要循环删除就只能使用迭代器,其他两种不好使会报错
  2. 还需要注意一点,如果list中存放的时Integer类型的数据,那么在删除时需要强转,否则会导致按照你指定的数字的下标去删
        Iterator<Integer> iterator = strings.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() > 5) {
                iterator.remove();
                //不能使用 strings.remove(iterator); 是删不掉的
            }
        }
        System.out.println("将大于5的全部删除" + strings);
        //fori当需要循环删除的时候,例如删除两个1会存在删不干净的情况,因为下标发生了变化,当你想删下标1时已经时它已经变成了0
        for (int i = 0; i < strings.size(); i++) {
            if (strings.get(i).equals(1)) {
                strings.remove(i);
            }
        }
        System.out.println(strings);
        //foreach 报数组下标越界
        for (Integer i : strings) {
            if (i.equals(3)) {
                strings.remove(i);
                break;
            }
        }
        strings.remove(0);
        System.out.println(strings);
        strings.remove((Integer) 5);
        System.out.println(strings);

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:44:21  更:2022-01-17 11:45:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 21:30:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码