Logo

郎哥编程

集合操作Collections类

2019-12-27 212

Collections类是一个工具类,用来对集合对象进行操作,提供对List、Map、Set等集合元素的排序、查询和修改等操作方法。

Collections类提供了一些静态方法,实现了基于List容器的一些常用算法,分别说明如下:

1、对List集合的排序操作

Collections类提供了对List集合元素进行排序、反转方法。

●   void sort(List)

该方法用于对List内的元素排序。

●   void shuffle(List)

该方法用于对List内的元素进行随机排序。

●   void reverse(List)

该方法用于对List内的元素进行逆序排序。

案例1:建立UserInfoBean类,然后再建立UserInfoBeanTest1测试类。在UserInfoBeanTest1测试类实例化List集合并添加UserInfoBean对象,最后遍历输出List集合元素。

在PCoreUnit5项目新建operation包,在operation包下新建UserInfoBean类,并实现Comparable接口。代码如下:

package operation;
 
/**
 * @ClassName: UserInfoBean
 * @Description: 集合框架(集合操作Collections类)案例1
 * @author 编程训练营
 * @date
 *
 */
 
public class UserInfoBean implements Comparable<UserInfoBean> {
    private int id;
    private String name;
    private int age;
 
    public UserInfoBean(int id, String name, int age) {
       super();
       this.id = id;
       this.name = name;
       this.age = age;
    }
 
    public int getId() {
       return id;
    }
 
    public void setId(int id) {
       this.id = id;
    }
 
    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;
    }
 
    // 重写父类(Object)的compareTo方法
    @Override
    public int compareTo(UserInfoBean o) {
       // TODO Auto-generated method stub
       if (this.id < o.id)
           return -1;
       else if (this.id > o.id)
           return 1;
       else
           return 0;
    }
 
    // 重写父类(Object)的toString方法
    @Override
    public String toString() {
       return "UserInfoBean [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
 
}

在operation包下新建UserInfoBeanTest1测试类,并添加三个UserInfoBean对象。代码如下:

package operation;
 
import java.util.ArrayList;
import java.util.List;
 
/** 
* @ClassName: UserInfoBeanTest1 
* @Description: 集合框架(集合操作Collections类)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class UserInfoBeanTest1 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法     
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
 
       List<UserInfoBean> userInfos = new ArrayList<UserInfoBean>();
       userInfos.add(new UserInfoBean(2, "张三", 10));
       userInfos.add(new UserInfoBean(1, "李四", 25));
       userInfos.add(new UserInfoBean(3, "王五", 40));
       for (int i = 0; i < userInfos.size(); i++)
       {
           System.out.println(userInfos.get(i).toString());
       }
    }
 
}

程序执行结果如下图所示:

image.png 

                                           

从上图输出结果可以看出,userInfos按照添加的顺序输出,我们希望userInfos能够按照UserInfoBean对象的id属性进行排序。

案例2:建立UserInfoBeanTest2测试类,在UserInfoBeanTest2测试类实例化List集合并添加UserInfoBean对象,通过Collections类对List按照升序排序,最后输出List集合元素。

在operation包下新建UserInfoBeanTest2类。代码如下:

package operation;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/** 
* @ClassName: UserInfoBeanTest2 
* @Description: 集合框架(集合操作Collections类)案例2
* @author 编程训练营 
* @date 
* 
*/
 
public class UserInfoBeanTest2 {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
      
       List<UserInfoBean> userInfos = new ArrayList<UserInfoBean>();
       userInfos.add(new UserInfoBean(2, "张三", 10));
       userInfos.add(new UserInfoBean(1, "李四", 25));
       userInfos.add(new UserInfoBean(3, "王五", 40));
      
       System.out.println("升序:");
       // 调用Collections类的sort方法排序,sort方法是按升序排序
       Collections.sort(userInfos);
 
       // 遍历输出List集合元素
       for (int i = 0; i < userInfos.size(); i++) {
           System.out.println(userInfos.get(i).toString());
       }
 
    }
 
}

在案例2代码添加了排序代码,调用Collections类的sort方法对userInfos按照升序排序(sort方法是按升序排序),因为Collections类提供的都是静态方法,因此可以不用实例化,而通过类名直接调用sort方法。

程序执行结果如下图所示:

image.png

从上图输出结果可以看出,userInfos按照UserInfoBean对象的id属性值升序输出。

案例3:建立UserInfoBeanTest3测试类,在UserInfoBeanTest3测试类实例化List集合并添加UserInfoBean对象,通过Collections类对List按照降序排序,最后输出List集合元素。

在UserInfoBeanTest3类添加排序代码,按照降序对userInfos排序,如果需要降序输出,则可以调用Collections类的sort方法后,再调用Collections类的reverse方法反转userInfos的元素。

在operation包下新建UserInfoBeanTest3类。代码如下:

package operation;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/** 
* @ClassName: UserInfoBeanTest3 
* @Description: 集合框架(集合操作Collections类)案例3
* @author 编程训练营 
* @date 
* 
*/
 
public class UserInfoBeanTest3 {
 
    /** 
    * @Title: main 
    * @Description:  Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
      
       List<UserInfoBean> userInfos = new ArrayList<UserInfoBean>();
       userInfos.add(new UserInfoBean(2, "张三", 10));
       userInfos.add(new UserInfoBean(1, "李四", 25));
       userInfos.add(new UserInfoBean(3, "王五", 40));
      
       System.out.println("降序:");
       // 调用Collections类的sort方法排序,sort方法是按升序排序
       Collections.sort(userInfos);
       // 反转userInfos,实现降序排序
       Collections.reverse(userInfos);
       // 遍历输出List集合元素
       for (int i = 0; i < userInfos.size(); i++) {
           System.out.println(userInfos.get(i).toString());
       }
    }
 
}

案例3代码在Collections类的sort方法后面,又调用了Collections类的reverse方法,反转userInfos,实现降序排序。

程序执行结果如下图所示:

image.png

2、对List集合元素的查找操作

Collections类提供了对集合元素进行二分查找、求最大值和最小值的方法。

●   void  max (List)

该方法用于找出List集合的最大元素。

●   void  min(List)

该方法用于找出List集合的最小元素。

●   void  binarySearch(List,Object)

该方法应用二分查找法返回元素在List中的位置。

案例4:建立UserInfoBeanTest4测试类,在UserInfoBeanTest3测试类实例化List集合并添加UserInfoBean对象,通过Collections类实现对集合元素的查找、求最大值和最小值操作。

在operation包下新建UserInfoBeanTest4类。代码如下:

package operation;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/** 
* @ClassName: UserInfoBeanTest4 
* @Description: 集合框架(集合操作Collections类)案例4
* @author 编程训练营 
* @date 
* 
*/
 
public class UserInfoBeanTest4 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
      
       List<UserInfoBean> userInfos = new ArrayList<UserInfoBean>();
       userInfos.add(new UserInfoBean(2, "张三", 10));
       userInfos.add(new UserInfoBean(1, "李四", 25));
       userInfos.add(new UserInfoBean(3, "王五", 40));
       // 添加排序代码
       System.out.println("升序:");
       Collections.sort(userInfos);
       for (int i = 0; i < userInfos.size(); i++)
       {
           System.out.println(userInfos.get(i).toString());
       }
       //求最大值
       UserInfoBean userInfo_max = Collections.max(userInfos);
       System.out.println("最大值为:" + userInfo_max);
      
       //求最小值
       UserInfoBean userInfo_min = Collections.min(userInfos);
       System.out.println("最小值为:" + userInfo_min);
 
       //二分查找
       UserInfoBean  tempUserInfo = new UserInfoBean(2, "张三", 10);
       int index = Collections.binarySearch(userInfos, tempUserInfo);      
       System.out.println("查找到索引位置" + index);
 
 
    }
 
}

案例程序分别调用Collections的max、min方法找出userInfos集合中的最大和最小元素,调用binarySearch方法查找tempUserInfo对象是否在userInfos集合中有相同的元素。注意,在调用binarySearch方法之前,一定要先对userInfos排序,否则查找结果不正确。

程序执行结果如下图所示:

image.png

3、List集合元素的复制操作

Collections类提供了对集合的复制操作,可以将原集合中的内容复制到新的集合中。

●   void  copy (List dest, List src)

该方法将src的内容复制到dest中。

复制方法应用非常简单,其用法可以参考前面的调用方法代码,在这里就不给出示例代码了。

Collection类是应用工具类,在集合操作中应用非常广泛。当程序需要对集合进行排序、复制、查找等操作时,可以使用Collection类完成对集合的操作。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论