热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java集合工具类_Java集合中Collections工具类总结

Collections工具类Collections是一个操作Collection(Set、List)和Map等集合的工具类Collection和Collections的区别

Collections工具类

Collections 是一个操作 Collection(Set、 List )和 Map 等集合的工具类

Collection和Collections的区别?

Collection是用来存储单列数据的集合接口,常用子接口有List和Set

Collections是操作Collection的工具类。

常用方法

排序操作:

reverse(List): 反转 List 中元素的顺序

shuffle(List): 对 List 集合元素进行随机排序

sort(List): 根据元素的自然顺序对指定 List 集合元素按升序排序

sort(List, Comparator): 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

swap(List, int, int): 将指定 list 集合中的 i 处元素和 j 处元素进行交换

查找和替换:

Object max(Collection): 根据元素的自然顺序,返回给定集合中的最大元素

Object max(Collection, Comparator): 根据 Comparator 指定的顺序,返回给定集合中的最大元素

Object min(Collection)

Object min(Collection, Comparator)

int frequency(Collection, Object): 返回指定集合中指定元素的出现次数

void copy(List dest,List src):将src中的内容复制到dest中

boolean replaceAll(List list, Object oldVal, Object newVal): 使用新值替换List 对象的所有旧值

举例:

reverse反转方法

@Test

public void test3() {

// 测试reverse方法

List list = new ArrayList();

list.add(2121);

list.add(-1);

list.add(21);

list.add(0);

list.add(45);

//反转

Collections.reverse(list);

System.out.println(list);//[45, 0, 21, -1, 2121]

}

sort方法

@Test

public void test2() {

// 测试sort方法

List list = new ArrayList();

list.add(2121);

list.add(-1);

list.add(21);

list.add(0);

list.add(45);

//按升序排序

Collections.sort(list);

System.out.println(list);//[-1, 0, 21, 45, 2121]

}

逆序排序

int compareTo(T t)方法说明

定义:比较此对象与指定对象的顺序

返回:负整数、零或正整数。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

@Test

public void test1() {

// 测试sort方法

List list = new ArrayList();

list.add(2121);

list.add(-1);

list.add(21);

list.add(0);

list.add(45);

// 降序

Collections.sort(list, new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

System.out.println(o2 - o1);

return o2 - o1; // 此时o2-o1是大于0的

}

});

System.out.println(list);//[-1, 0, 21, 45, 2121]

}

对自定义对象的排序

方法一:通过实现Comprable的compareTo方法进行排序

// 实现Comparable接口

class User implements Comparable {

private String name;

private Integer age;

public User(String name, Integer age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public int compareTo(User o) {

//首先比较年龄,如果年龄相同,则比较名字

int flag = this.getAge().compareTo(o.getAge());

if (flag == 0) {

return this.getName().compareTo(o.getName());

} else {

return flag;

}

}

@Override

public String toString() {

return "User{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

测试方法

// 自定义对象的排序,比如对User对象按照年龄排序,再按照name排序

@Test

public void testSort() {

User f1 = new User("tony", 19);

User f2 = new User("jack", 16);

User f3 = new User("tom", 80);

User f4 = new User("jbson", 44);

User f5 = new User("jason", 44);

User f6 = new User("tom", 12);

List list = new ArrayList();

list.add(f1);

list.add(f3);

list.add(f4);

list.add(f2);

list.add(f5);

list.add(f6);

Collections.sort(list);

for (User o : list) {

System.out.println(o.getAge() + "-->" + o.getName());

}

}

输出:

12-->tom

16-->jack

19-->tony

44-->jason

44-->jbson

80-->tom

copy方法

List dest = Arrays.asList(new Object[list.size()]);

@Test

public void testCopy(){

List list = new ArrayList();

list.add(2121);

list.add(-1);

list.add(21);

list.add(0);

list.add(45);

//错误写法:此时dest集合为长度为0,报错IndexOutOfBoundsException: Source does not fit in dest

// List dest = new ArrayList();

// Collections.copy(dest,list);

// System.out.println(dest.size());

// System.out.println(dest);

// 正确写法:先造一个值为null,长度为list长度的集合。再拷贝

List dest = Arrays.asList(new Object[list.size()]);

System.out.println(dest.size()); // 5

Collections.copy(dest,list);

System.out.println(dest);

}



推荐阅读
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍 Java 中如何使用 Year 类的 atMonth 方法将年份和月份组合成 YearMonth 对象,并提供代码示例。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
author-avatar
cathy李lee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有