Java中的Collections类的使用示例详解

Collections的常用方法及其简单使用

代码如下:

package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Stack;

public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        Collections.sort(list);//sort()对集合中的元素进行升序排序
        //binarySearch()采用折半查找在当前集合中寻找目标元素
        System.out.println("升序排序后,元素56的下标是:"+Collections.binarySearch(list,56));//下标从0开始
        System.out.print("升序排序后集合中的元素是:");
        for(Integer i:list) {
            System.out.print(i+" ");
        }
        System.out.print("\n随机排序后集合中的元素是:");
        Collections.shuffle(list);//shuffle()对集合中的元素进行随机排列
        for(Integer i:list){
            System.out.print(i+" ");
        }
        System.out.println("\n集合的最大值:"+Collections.max(list));//max()找到集合中元素的最大值
        System.out.println("集合中的最小值:"+Collections.min(list));//min()找到集合中元素的最小值
        System.out.print("逆序排列后集合中的元素是:");
        Collections.reverse(list);//reverse()将当前排列好的元素进行逆序排列
        for(Integer j:list){
            System.out.print(j+" ");
        }
        Collections.rotate(list,3);//将集合中的元素旋转指定的距离
        System.out.print("\n将集合中的元素旋转3之后集合为:");
        for(Integer j:list){
            System.out.print(j+" ");
        }
        List<Integer>list1=new ArrayList<>(10);
    }
}

输出:

升序排序后,元素56的下标是:1
升序排序后集合中的元素是:7 56 75 125 
随机排序后集合中的元素是:125 75 56 7 
集合的最大值:125
集合中的最小值:7
逆序排列后集合中的元素是:7 56 75 125 
将集合中的元素旋转3之后集合为:56 75 125 7

注:在执行binarySearch方法对元素进行折半查找前,先调用sort方法对集合中的元素进行排序,有序且为顺序存储才能够进行折半查找,这是我们在数据结构中就学习的,在java中同样是如此

Collections.copy()方法

代码如下:

package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        List<Integer>list1=new ArrayList<>(4);
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        Collections.copy(list1,list);
        for(Integer i:list1) {
            System.out.print(i+" ");
        }
    }
}

报错:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
    at java.base/java.util.Collections.copy(Collections.java:561)
    at Collections.collections.main(collections.java:16)

在我们所编写的程序中暂时为发现语法性的问题,点开561行,copy方法的源码:

通过看源码,发现这个方法是有目标数组和源数组的元素个数进行比较的操作,如果目标数组的元素个数小于源数组的元素个数,则抛出异常:下标越界。

再返回到我们的java代码,list1在最开始我们就设置了它的初始容量为4,那么为什么还会出现下标越界问题呀?

通过输出list1的长度,去查看是否是初始化操作有问题:

System.out.println(list1.size());

输出为0,并不是我们最初设定的4

指定的list1容量为4,只是指定了list1当前能够容纳的元素个数为4,即指定了list1的容纳能力(int capacity)为4,并不代表list1中有了四个实际的元素

我们并不能通过初始化操作去改变size的大小,初始化时实际元素个数(size)永远为0,只有在进行add()和remove()等相关操作时,实际元素个数才会发生改变

解决办法即为:给目标集合初始化一定的长度,可使用0/null实现数据的初始化操作

修改如下:

import java.util.List;
public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        List<Integer>list1=new ArrayList<>(3);
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        for(int i=0;i<array.length;i++){
            list1.add(0);
        }
       System.out.println("复制完成后list1中的元素如下:");
        Collections.copy(list1,list);
        for(Integer i:list1) {
            System.out.print(i+" ");
        }
    }
}

输出:

复制完成后list1中的元素如下:
125 75 56 7

在修改的过程中,我将capacity的值改变为小于数组长度的,因此看来给list1指定容量在这里是没什么用,但该操作在某些时候可提高效率。

ArrayList指定初始容量可提高效率

ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素,除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小,每个ArrayList实例都有一个容量,初始化容量10,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小,随着向ArrayList中不断添加元素,其容量也自动增长,自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量

以上就是Java中的Collections类的使用示例详解的详细内容,更多关于Java Collections类的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java Collection集合的三种遍历方式详解

    目录 Collection遍历方式 迭代器遍历 foreach遍历 Lambda遍历 Collection遍历方式 Collection集合遍历的方式有三种: 迭代器foreach/增强for循环lambda表达式 迭代器遍历 迭代器概述: 遍历就是一个一个的把容器中的元素访问一遍. 迭代器在Java中是Iterator代表的,迭代器是集合的专用遍历方式. Collection集合获取迭代器的方: 方法名称 说明 iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

  • Collection stream使用示例详解

    目录 基础数据 元素转Stream Terminal opt-Collectors.mapping Terminal opt-Collectors.toCollection&collectingAndThen Terminal opt-Collectors.toMap 近日频繁应用 Stream 的 Api,记录一下应用实例. 基础数据 实体类: @Data @Accessors(chain = true) public static class Person { private String

  • Java集合的定义与Collection类使用详解

    什么是集合? 概念:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能. 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能引用类型 Collection : Collection体系结构: Collection的使用:包括增加元素.删除元素.遍历元素(两种方法)和判断 直接看代码: package com.collections; import java.util.ArrayList; import java.util.Collection

  • Java中的Collections类的使用示例详解

    Collections的常用方法及其简单使用 代码如下: package Collections; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Stack; public class collections { public static void main(String[]args){ int array[]={125,75,56,7}; Li

  • Java中的vector类使用方法示例详解

     基本操作示例 VectorApp.java import java.util.Vector; import java.lang.*; import java.util.Enumeration; public class VectorApp { public static void main(String args[]) { Vector v1 = new Vector(); Integer integer1= new Integer(1); //加入为字符串对象 v1.addElement("

  • java 中使用匿名类直接new接口详解及实例代码

    java:使用匿名类直接new接口 java中的匿名类有一个倍儿神奇的用法,见下面代码示例: package contract; public interface ISay { void sayHello(); } 上面是一个简单的接口,下面是如何使用: package jimmy; import contract.ISay; public class Program { public static void main(String[] args) { ISay say = new ISay()

  • Java中动态规则的实现方式示例详解

    背景 业务系统在应用过程中,有时候要处理"经常变化"的部分,这部分需求可能是"业务规则",也可能是"不同的数据处理逻辑",这部分动态规则的问题,往往需要可配置,并对性能和实时性有一定要求. Java不是解决动态层问题的理想语言,在实践中发现主要有以下几种方式可以实现: 表达式语言(expression language) 动态语言(dynamic/script language language),如Groovy 规则引擎(rule engine

  • Java中的权限修饰符(protected)示例详解

    前言 大部分来自:https://blog.csdn.net/justloveyou_/article/details/61672133.并在这个博客的基础上,加上了自己的一些理解. 权限控制表 修饰词 本类 同一个包的类 继承类 其他类 private √ × × × 无(默认) √ √ × × protected √ √ √ × public √ √ √ √ 关于protected 最近在看Effective Java时,遇到了一个关于protected修饰符的问题.这个问题中,对于它的认识

  • 在java中如何定义一个抽象属性示例详解

    前言 本文主要给大家介绍的是在java中定义一个抽象属性的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: Abstract关键字通常被用于类和方法,用来把某些行为的实现委托给子类.由于Java不支持抽象属性,如果你试图将类属性标记为抽象,将会得到一个编译时错误. 在本教程中,我们将介绍两种定义抽象属性的方法,这些抽象属性可以由子类进行设置,而且不使用Abstract 关键字. 实用案例 假设我们想要实现一个记录事务的日志模块,用来记录特定事务的信息.我们希望这个模块是抽

  • Java中class和Class的区别示例详解

    目录 一.class与Class区别 二.Class介绍 三.如何得到Class对象 1.通过getClass()方法获取到Class对象 2.通过forName()方法获取到Class对象 3.类.class获得Class对象(类字面常量) 四.Class常用方法 总结 一.class与Class区别 class是Java中的关键字,如public class Xxx 或者 class Xxx ,在声明Java类时使用. 而Class是一个类. 我们通常认为类是对象的抽象和集合,Class就相

  • 详解java中的Collections类

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*; 一.动态.有序.可变大小的一维数组Vector与ArrayList  Collectio

  • Java中枚举类的用法示例详解

    目录 1.引入枚举类 2.实现枚举类 3.枚举类的使用注意事项 4.枚举的常用方法 5.enum细节 1.引入枚举类 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割. 示例: enum Color { RED, GREEN, BLUE; } 2.实现枚举类 接下来我们来看一个一个简单的DEMO示例: /** * java枚举 */ p

  • Java使用Collections.sort()排序的示例详解

    Java中Collections.sort()排序详解,通过实例代码给大家讲解,具体代码如下所示: public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("beijing"); list.add("shanghai"); list.add("hangzhou"); Collections.

随机推荐