首页 > 作文

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

更新时间:2023-04-04 05:58:11 阅读: 评论:0

介绍了arraylist集合去重的三种方式,以及排序的两种方式,以及反射获取arraylist的容量,以及array和arraylist的区别。

1 array和arraymake造句list的区别以及使用条件

array 和 arraylist都是存放数据的容器.array是代表的是数组,arraylist是一个集合,arraylist底层使用的封装了一个object数组。它的可变就是数组扩容。

区别:

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

使用条件:

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

2 list去重

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);

注意: contains(obj); remove(object obj);

以上两个方法底层是依据equals方法:根据equals方法返回的值,判断是否移除/或者是判断是否存在。因此对对象去重时,需要重写equals方法,使得equals比较的是具体值而不是地址。

2.3 利用java8的lambda

使用java8的lambda表达式轻松实现集合去重

al = al.stream().collect(collectors.collectingandthen(collectors.tocollection(hasht::new), arraylist::new));system.out.println(al);

3 list排序

clooections的sort方法快速实现排序:

public static <t extends comparable<? super t>> void sort(list list) –自然排序 public static void sort(list list,comparator<? super t> c) –自定义排序

4 反射获取arraylist的容量

明显我们无法直接通过可用方法获取arraylist的容量,因此只有使用反射获取:

// 获取lis邮递员的英文t容量public static integer getcapacity(arraylist list) {    integer length = null;    class clazz = list.getclass();    field field;    try {        field = clazz.getdeclaredfield("elementdata");        field.taccessible(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 迭代器和for循环速度测试

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 main(string[] args) {        long time1 = arrayfor();        long time2 = arrayiterator();​        system.out.println("arraylist for循环所用时间==" + time1);        system.out.println("arraylist 迭代器所用时间==" + time2);    }}

本文发布于:2023-04-04 05:58:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/064637ca45b0ca50ba32f26f363f5090.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java去重的方法(java高并发解决方案).doc

本文 PDF 下载地址:java去重的方法(java高并发解决方案).pdf

标签:数组   的是   方法   元素
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图