java去重的方法 java高并发解决方案

介绍了ArrayList***的三种去重方式,两种排序方式,反射获取ArrayList的能力,以及Array和ArrayList的区别。1数组和ArrayList的区别和使用条件Array和arraylist是存储数据的容器。Array表示一个数组,arraylist是一个***,ArrayList的底层封装了一个对象数组。它的可变性是数...

介绍了ArrayList***的三种去重方式,两种排序方式,反射获取ArrayList的能力,以及Array和ArrayList的区别。

1数组和ArrayList的区别和使用条件

Array和arraylist是存储数据的容器。Array表示一个数组,arraylist是一个***,ArrayList的底层封装了一个对象数组。它的可变性是数组扩展。

差异:

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型,jdk1.5之后传入基本类型会自动装箱。Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。Array大小是固定的,ArrayList的大小是动态变化的。ArrayList作为Array的增强版,当然是在方法上比Array更多样化,比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。

使用条件:

当存放的内容数量不固定,不确定,有限时采用arraylist。如果想要保存一些在整个程序运行期间都会存在而且不变的数据,可以放在数组里。如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用ArrayList的效率很低,使用数组进行这样的容量调整动作很麻烦,我们可以选择LinkedList。

2列表重复数据删除

2.1借助辅助采集

在辅助设备的帮助下

ArrayList<String> al = new ArrayList<String>();al.add("aa");al.add("bb");al.add("aa");al.add("dd");al.add("dd");al.add("dd");al.add(null);al.add("ee");al.add("ee");//去重思路一 借助辅助***ArrayList<String> al2 = new ArrayList<String>();for (String s : al) { if (!al2.contains(s)) { al2.add(s); }}al.clear();al.addAll(al2);System.out.println(al); //[aa, bb, dd, null, ee]

2.2使用迭代器

直接用列表迭代器,不用辅助集(乱序)。

ListIterator<String> sli = al.listIterator();while (sli.hasNext()) { String next = sli.next(); //获得下一个元素 sli.remove(); //移除获得的元素 if (!al.contains(next)) //判断源***是否包含被移除的元素 { sli.add(next); //没包含就再添加进来 }}System.out.println(al);

注意:包含(obj);remove(Object obj);

以上两种方法的底层都是基于equals方法:根据equals方法返回的值,判断是否删除或者是否存在。因此,在对对象进行重复数据消除时,需要重写equals方法,以便equals比较特定值而不是地址。

带java8的2.3 lambda

利用Java8的lambda表达式轻松实现***去重

al = al.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(HashSet::new), ArrayList::new));System.out.println(al);

3列表排序

动作的排序方法快速实现排序;

公共静态& ltt扩展可比& lt?超级T & gt& gtvoid排序(列表列表)–自然排序公共静态空排序(列表列表,比较器

4反射以获得数组列表的容量

显然,我们无法通过可用的方法直接获得ArrayList的容量,所以我们必须使用反射来获得它:

// 获取list容量public static Integer getCapacity(ArrayList list) { Integer length = null; Class clazz = list.getClass(); Field field; try { field = clazz.getDeclaredField("elementData"); field.setAccessible(true); Object[] object = (Object[]) field.get(list); length = object.length; return length; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return length;}

5迭代器,用于循环速度测试

public class ArrayListTest { static List<Integer> list = new ArrayList<Integer>(); static { for (int i = 1; i <= 100000000; i++) { list.add(i); } }? public static long arrayFor() { //开始时间 long startTime = System.currentTimeMillis(); for (int j = 0; j < list.size(); j++) { Object num = list.get(j); } //结束时间 long endTime = System.currentTimeMillis(); //返回所用时间 return endTime - startTime; }? public static long arrayIterator() { long startTime = System.currentTimeMillis(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); } long endTime = System.currentTimeMillis(); return endTime - startTime; }? public static void ***in(String[] args) { long time1 = arrayFor(); long time2 = arrayIterator();? System.out.println("ArrayList for循环所用时间==" + time1); System.out.println("ArrayList 迭代器所用时间==" + time2); }}

本文来自不茫然未来投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/649587.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-25
下一篇 07-25

相关推荐

  • java项目开发案例经典 java初学者简易小程序

    项目–吃货联盟一、项目准备:1.开发环境:JDK1.8IntelliJ IDEA2.技术要点分析:能理解程序基本概念 – 程序会使用变量、数据类型会使用顺序、选择、循环、跳转语句编写程序会使用数组3.任务描述:只要动动手指,就能送餐上门。“网上订餐受到现代人的青睐。现在,开发了一个

    2023-07-28 08:47:01
    684 0
  • java创建数组的几种方式 java编写图形界面程序

    数组是一组具有相同数据类型的数据。作为对象,new关键字允许用于内存分配。首先,熟悉一维数组的创建和使用。有两种方法可以声明一维数组:元素类型数组名称[];元素类型[]数组名称;元素类型决定数组的数据类型,在java中可以是任意数据类型,声明一个一维数组,比如int arr

    2023-07-27 04:07:01
    963 0
  • 如何安装java运行环境 java环境配置教程

    手动安装可以让用户更好地控制Java运行时环境。使用Linux发行版的包管理工具很容易安装Java包。但是,有时候需要手动安装Java。这对于Tomcat或JBoss等基于Java的应用服务器的管理员来说尤其重要。许多开源和专有软件产品依赖于这些服务。还是开发人员运行时套件?Java虚拟机(

    2023-07-26 08:27:01
    512 0
  • java是什么软件有什么作用 深入解析Java编程语言

    很多人或多或少和我一样。当我偶然在电视上看到程序员往电脑里敲一串代码的时候,我会忍不住惊叹他们,想象自己有一天也能这样。是的,有一天你也可以这样做!我们来看看到底什么是J***A?为什么学习?学习有什么用?让我给你看看2009年的计算机语言排名1。什么是JavaJava是一

    2023-07-26 04:56:01
    131 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信