Java 集合的工具类Collections的常用方法
Collections类
java.utils.Collections是集合工具类,用来对集合进行操作。
Collections类的常用方法
这里介绍四个常用方法:
addAll(Collection<T> c, T ... elements)
shuffle(List<?> list)
sort(List<r> list)
sort(List<T> list, Comparator<? super T>)
public static <T> boolean adda1l(Collection<T> c, T ... elements)往集合中添加一些元素。 public static void shuff1e(List<?> 1ist)打乱顺序:打乱集合顺序。 public static <T> void sort(List<r> 1ist):将集合中元素按照默认规则排序。 public static <T> void sort(List<T> list, Comparator<? super T>):将集合中元素按照指定规则排序。
addAll(Collection<T> c, T ... elements)方法
参数说明:
Collection<T> c:是要被添加元素的集合
T ... elements:可变参数,是要给集合添加的元素
方法功能:
往集合中添加一些元素
例子:
import java.util.Collections;
import java.util.HashSet; public class DemoCollections {
public static void main(String[] args) {
// 创建一个HashSet集合
HashSet<String> hashSet = new HashSet<>(); // 调用Collections类的静态方法addAll,往集合hashSet中添加多个元素
Collections.addAll(hashSet, "a", "b", "c", "d", "e", "f", "g"); // 输出HashSet集合
System.out.println(hashSet);
}
}
输出结果:
[a, b, c, d, e, f, g]
shuffle(List<?> list)方法
参数说明:
List<?> list:表示传入的集合,即该方法传入的参数是一个集合
方法功能:
打乱集合的顺序。
例子:
import java.util.ArrayList;
import java.util.Collections; public class DemoCollectionsShuffle {
public static void main(String[] args) {
// 创建一个ArrayList集合
ArrayList<String> arrayList = new ArrayList<>(); // 往arrayList集合中添加元素
Collections.addAll(arrayList, "A", "B", "C", "D", "E", "F", "G");
System.out.println("没有打乱时的集合:" + arrayList); // 调用Collections类的静态方法shuffle,将集合arrayList里面的元素顺序打乱
Collections.shuffle(arrayList);
System.out.println("打乱以后的集合:" + arrayList);
}
}
输出结果:
没有打乱时的集合:[A, B, C, D, E, F, G]
打乱以后的集合:[D, B, C, E, A, G, F]
sort(List<r> list)方法
参数说明:
List<?> list:表示传入的集合,即该方法传入的参数是一个集合
方法功能:
对集合进行排序(默认为升序排序)
例子:
import java.util.ArrayList;
import java.util.Collections; public class Demo01CollectionsSort {
public static void main(String[] args) {
// 创建一个ArrayList集合
ArrayList<Integer> arrayList = new ArrayList<>(); // 往arrayList集合中添加元素
Collections.addAll(arrayList, 1, 2, 10, 9, 8);
System.out.println("没有排序时的集合:" + arrayList); // 调用sort()方法,将集合arrayList里面的元素进行排序
Collections.sort(arrayList);
System.out.println("排序后的集合:" + arrayList);
}
}
输出结果:
没有排序时的集合:[1, 2, 10, 9, 8]
排序后的集合:[1, 2, 8, 9, 10]
sort(List<T> list, Comparator<? super T>)方法
首先,说明一下,这个方法仅做了解即可,学习过程中通常都是默认使用sort(List<T> list)方法的。
参数说明:
List<?> list:表示传入的集合,即该方法传入的第一个参数是一个集合
Comparator<? super T>:这是一个排序规则,自定义(覆盖重写该接口的排序方法)
方法功能:
对集合进行排序(默认为升序排序)
例子:
// 随便创建一个Person类
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
自己定义一个排序规则进行测试:
// 举例
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; public class Demo02CollectionsSort { public static void main(String[] args) {
// 创建一个ArrayList集合
ArrayList<Person> arrayList = new ArrayList<>(); // 往arrayList集合中添加元素,集合存储的数据的类型是自定义类型(Person)
Collections.addAll(
arrayList,
new Person("LeeHua", 20),
new Person("WanTao", 18),
new Person("XiaMin", 22),
new Person("HonMao", 22)
);
System.out.println("没有排序时的集合:" + arrayList); // 自定义排序规则,对arrayList集合进行排序
Collections.sort(arrayList, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// 年龄相等,按照名字排序
while (o1.getAge() - o2.getAge() == 0) {
if (o1.getName().length() > o2.getName().length()) {
for (int i = 0; i < o2.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
return 1;
}
else if (o1.getName().length() < o2.getName().length()) {
for (int i = 0; i < o1.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
return - 1;
}
else {
for (int i = 0; i < o2.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
return 0;
}
}
// 年龄不相等,按照年龄排序
return o1.getAge() - o2.getAge();
}
});
System.out.println("排序以后的集合:" + arrayList);
}
}
输出结果:
没有排序时的集合:[Person{name='LeeHua', age=20}, Person{name='WanTao', age=18}, Person{name='XiaMin', age=22}, Person{name='HonMao', age=22}]
排序以后的集合:[Person{name='WanTao', age=18}, Person{name='LeeHua', age=20}, Person{name='HonMao', age=22}, Person{name='XiaMin', age=22}]
排序规则代码的理解:
new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// 首先判断年龄是否相等
while (o1.getAge() - o2.getAge() == 0) {
// 如果this年龄 == object年龄,那么就按名字的字母(char code)比较
// 按照名字的每个字母来比较
if (o1.getName().length() > o2.getName().length()) {
// o1的名字长度 > o2的名字长度
for (int i = 0; i < o2.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
// 假如o2的名字的所有字母,按顺序都与o1的名字对应位数的字母相等,字母长度大的排后,即o1排后
return 1;
}
// o1的名字长度 < o2的名字长度
else if (o1.getName().length() < o2.getName().length()) {
for (int i = 0; i < o1.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
// 假如o1的名字的所有字母,按顺序都与o2的名字对应位数的字母相等,字母长度大的排后,即o2排后
return - 1;
}
// o1的名字长度 = o2的名字长度
else {
for (int i = 0; i < o2.getName().length(); i++) {
if (o1.getName().charAt(i) - o2.getName().charAt(i) != 0 ) {
return o1.getName().charAt(i) - o2.getName().charAt(i);
}
}
// 假如o1的名字的所有字母,按顺序都与o2的名字对应位数的字母相等,那么按照arrayList集合的添加顺序排序
return 0;
}
}
// 年龄不相等,按照年龄排序
return o1.getAge() - o2.getAge();
}
}
Java 集合的工具类Collections的常用方法的更多相关文章
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
- 操作集合的工具类Collections
1 操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操 ...
- Java集合----Collection工具类
Collections 工具类 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了 ...
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
- java之操作集合的工具类--Collections
Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...
- JAVA基础——Arrays工具类十大常用方法
Arrays工具类十大常用方法 原文链接:http://blog.csdn.net/renfufei/article/details/16829457 0. 声明数组 String[] aArray ...
- Java-集合第六篇操作集合的工具类Collections
1.Java提供了一个操作Set.List.Map等集合的工具类:Collections. 工具类中提供的方法主要针对Set.List.Map的排序.查询.修改等操作,以及将集合对象设置为不可变.对集 ...
- Java 集合框架工具类
Collections Arrays Collections 集合框架的工具类, 里面的方法都是静态的, 可以直接使用类名调用 常用方法 1. sort(List<T> list); // ...
随机推荐
- 在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作
CentOS 7.3 这部分以在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作. 登录 ECS 管理控制台,确认实例所在安全组 ...
- display常用的三种值:block、inline、inline-block
display:block(块级元素 ) 会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父级宽度 display:inline(内联(行级)元素 ) 不会独占一 ...
- CF1166E The LCMs Must be Large
CF1166E The LCMs Must be Large 构造趣题 正着推其实很不好推 不妨大力猜结论 如果两两集合都有交,那么一定可以 证明: 1.显然如果两个集合没有交,一定不可以 2.否则给 ...
- Laravel5.3使用学习笔记---中间件
Laravel提供了中间件的使用.那什么是中间件呢,根据用法,我总结为,夹在“请求—>控制器—>响应—>end”中间运行的代码片段.本文将以官方英文文本为基础资料进行笔记记录. La ...
- Python--day42--mysql操作数据库及数据表和基本增删改查
sql语法规则: 一.操作文件夹 1.创建数据库db2:create database db2; 2.创建数据库db2并标明数据库的编码格式为utf8:create database db2 defa ...
- tf.train.string_input_producer()
处理从文件中读数据 官方说明 简单使用 示例中读取的是csv文件,如果要读tfrecord的文件,需要换成 tf.TFRecordReader import tensorflow as tf file ...
- java 内省综合案例和Beanutils工具包
演示用eclipse自动生成 ReflectPoint类的setter和getter方法. 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用 ...
- H3C tracert命令的输出
- H3C网络监测工具命令
1.Debugging 2.Display debugging 3.Display diagnostic-information display diagnostic-information 命令用来 ...
- 【33.18%】【hdu 5877】Weak Pair (3种解法)
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...