当前位置: 首页 > news >正文

Collections类详解

目录

一.Collections概述:

   1.1什么是Collections类:

   1.2 Collections类和collection的区别和联系:

二. Collections类的主要方法:

一.Collections概述:

     1.1  什么是Collections类:

  • Java.util.Collections是一个集合工具类,用于操作LIst,Set,Map等集合。

  • Collections类提供了一系列的静态方法,可以实现对集合元素的排序,添加一些元素,随机排序,替换等操作。

       注意:Collections类不能new对象,不是因为没有构造方法,而是因为Collections的构造方法被私有化处理了。但是调用方法可以直接通过类名调用Collections类的方法,因为Collections类中的方法都是被static修饰了,可以直接用类名调用。

   1.2 Collections类和collection的区别和联系:

区别:

  • Collections是一个工具类,有属性和静态方法
  • Collection是一个根接口,下面有List和Set接口,两个接口各有他们具体的实现类。
  • 他们只有一个字母的区别,但是两者是完全不同的概念。

联系:

  • Collctions中提供给collection接口下的Set和List集合许多方法,方便对集合中的元素更好的处理。

二. Collections类的主要方法:

Collections中的方法都是静态方法,可以通过类名.方法名直接调用。

1.public static void shuffle(List)。混乱排序   

2.public static <T> boolean addAll(Collection<T> c, T... elements)。添加一些元素

3.public static <T> void sort(List<T> list,Comparator<? super T> )。  排序,将集合中元素按照指定规则排序

4.public static <T extends Comparable<? super T>> void sort(List<T> list)。  排序,将集合中元素按照默认规则排序。

5.public static int binarySearch(List list, Object key)。查找,使用二分搜索法搜索指定的 List 集合,以获得指定对象在 List 集合中的索引。如果要使该方法可以正常工作,则必须保证 List 中的元素已经处于有序状态。

6.public static void copy(List <? super T> dest,List<? extends T> src)  复制, 用于将指定集合中的所有元素复制到另一个集合中。

7.public static void replaceAll()。替换,替换集合中所有的旧元素为新元素

1.shuffle()随机排序:

shuffle方法用于将集合中的元素,随机打乱原来的顺序。

          注意:shuffle中的集合只能是List集合。Set集合会报错。

使用案例:

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;public class CollectionsTest {public static void main(String[] args) {//创建一个Linkedlist集合LinkedList linkedList = new LinkedList();inkedList.add(123);linkedList.add(456);linkedList.add(234);linkedList.add(567);for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}//打乱顺序Collections.shuffle(linkedList);System.out.println("===========");System.out.println("打乱顺序之后:");for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}}}

运行结果:

2.  addAll()   添加一些元素:

作用:

addAll方法用于往集合中快速添加一些元素

用法:

第一个形参放集合对象,之后放参数1 ,参数2, 可变参数类型... 。

什么是可变参数类型呢?

方法中的某个参数在实际调用时,实参个数可以0个,或者1个,或者多个。这个参数就是可变参数。可变参数参数的意义:方便方法的调用,可以传入任意多个同类型的数据。

注意点:

  1. 如果方法中有多个参数,可变参数要放到最后。

  2. 一个方法只能有一个可变参数

使用案例:

1.创建多个学生对象。

2.把学生用addAll方法装入Linkedlist集合中

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;public class CollectionsTest {public static void main(String[] args) {
//创建一个linkedlist集合LinkedList linkedList = new LinkedList();Student student1 = new Student(1, "章1");Student student2 = new Student(6, "章2");Student student3 = new Student(9, "章3");Student student4 = new Student(1, "章4");
Collections.addAll(linkedList,student1,student2,student3,student4);
for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}

运行结果:

3. sort()自然排序:

作用:

把集合中的元素按照规则升序或者降序,再或者什么也不干。

注意点:

当使用sort方法时,该集合元素必须是Comparable的子类型,也就是集合中的元素必须实现comparable接口中的comparaTo方法。否则不能使用该方法。

public int compareTo(T o);

必须实现这个抽象方法,才能使用sort方法。但是由于我们一些基本的常用类如String,基本数据类型的包装类等,已经实现了该方法,所以我们不需要自己重写该方法了。自定义类型使用sort方法就必须实现comparaTo方法。

4.sort()自定义排序:

自定义类型,如学生类,有属性:年龄,姓名等。创建多个学生类对象,放入List集合中。自定义使用sort方法时就必须重写comparaTo方法。

@Overridepublic int compareTo(Student2 o) {return this.age-o.age;}

重写之后的comparaTo方法。 

重载之后的sort():

sort()方法还有第二种类型(collection,new Comparator<Object>)

Comparator是一个接口,实际上是new了Comparator的实现类,但是要实现里面的抽象方法。

使用案例:

1.自定义一个学生类,有年龄,姓名,成绩属性。

2.创建5个学生对象,然后根据他们年龄大小实现年龄升序和成绩降序输出。

import java.util.Collections;
import java.util.LinkedList;public class CollectionsTest2 {public static void main(String[] args) {LinkedList linkedList = new LinkedList();Student2 student1 = new Student2(10, "章1");Student2 student2 = new Student2(16, "章2");Student2 student3 = new Student2(19, "章3");Student2 student4 = new Student2(18, "章4");//把对象添加到集合中Collections.addAll(linkedList,student1,student2,student3,student4);Collections.sort(linkedList);for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}}
}
class Student2 implements Comparable<Student2>{int age;String name;public Student2(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "Student2{" +"age=" + age +", name='" + name + '\'' +'}';}@Overridepublic int compareTo(Student2 o) {return this.age-o.age;}
}

 

注意点:

1.按照某种规则排序,是重写comparaTo方法时,用什么属性去比较,这个比较的属性就是比较规则排序。

2.实现升序或者降序规则:this(当前调用方法的对象)  o(参数传入)
        所有比较最底层的逻辑都是发生两两比较逻辑,返回比较结果
        正数  this.age > o.age
        负数  this.age < o.age
        0     this.age==o.age。

6.copy()  复制:

 作用:将指定集合中的所有元素复制到另一个集合中。

 使用:

(List <? super T> dest,List<? extends T> src)

dest是目标集合,src是原集合。把原集合中的元素放到目标集合中。

使用注意点:

1。原集合复制到目标集合中去,原集合会覆盖掉目标集合中元素,这个覆盖从索引值为0开始覆盖,直到原集合复制完毕。

2.目标集合的长度至少和源集合的长度相同,如果目标集合的长度更长,则不影响目标集合中的其余元素。如果目标集合长度不够而无法包含整个源集合元素,程序将抛出 IndexOutOfBoundsException 异常。

3.copy方法也只能复制List集合,不能复制set集合

个人见解:由于会覆盖掉目标集合的元素,我觉得没有太多的用处

使用案例:

1.把集合1赋值到集合2中

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;public class CollectionsTest2 {public static void main(String[] args) {LinkedList linkedList = new LinkedList();LinkedList linkedList1 = new LinkedList();
//创建两个set集合HashSet hashSet = new HashSet();HashSet hashSet1 = new HashSet();linkedList1.add(123);linkedList1.add(222);linkedList.add(333);linkedList.add(444);linkedList.add(888);hashSet.add(234);hashSet1.add(666);Collections.copy(linkedList, linkedList1);//使用copy方法复制set会报错
//        Collections.copy(hashSet,hashSet1);for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));
//        }}}
}

运行结果:

7.replaceAll()。替换:

作用:替换集合中所有的旧元素为新元素

使用:

(List list, Object oldVal, Object newVal)

list需要替换的集合,oldval需要被替换的值,newval新的值

使用案例:

把集合中的333替换成字符串“8888”

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;public class CollectionsTest2 {public static void main(String[] args) {LinkedList linkedList = new LinkedList();linkedList.add(123);linkedList.add(222);linkedList.add(333);linkedList.add(444);linkedList.add(888);hashSet.add(234);hashSet1.add(666);
//替换Collections.replaceAll(linkedList,333,"8888");for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));
//        }}}
}


http://www.taodudu.cc/news/show-7665441.html

相关文章:

  • grant 命令
  • mysql grant 所有权限_mysql之grant权限说明
  • mysql 取消grant_MySQL中授权(grant)和撤销授权(revoke)
  • oracle数据库grant用法,Oracle初学者之grant授权
  • pm grant 命令
  • 第四十八章 SQL命令 GRANT(二)
  • mysql grant on_Mysql权限管理grant命令使笔记
  • oracle view grant,view需要with grant option的情况
  • mysql grant 权限修改_mysql grant用户权限设置
  • mysql授权用户grant所有权限
  • mysql用grant_mysql中grant用法介绍
  • oracle grant的用法,Oracle 用户权限 Grant
  • mysql grant select()_mysql grant命令
  • mysql grant命令详解_mysql grant命令详解
  • 20.grant的用法(权限的授权)
  • 常用Java工具类:手机号脱敏,身份证号脱敏
  • java工具之解析yaml文件
  • Java 脱敏工具类总结
  • java工具类static静态方法读取yml配置
  • Java DecimalFormat用法
  • Android DecimalFormat 格式化数字
  • DecimalFormat(double转为String时数据过小或者过大自动转为科学计数法问题)
  • JDBC和Statement的使用
  • java.sql.statement_Java使用Statement接口执行SQL语句操作实例分析
  • JDBC的Statement对象的使用
  • java statement 参数_JDBC中Statement和Preparement的使用讲解
  • Unreachable statement
  • BUUCTF,Crypto:Cipher
  • python-RSA加密与java-Cipher加密适配
  • OpenSSL/GMSSL EVP接口说明——1.3 CIPHER_CTX操作