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

源码之家网站模板/网址查询网站

源码之家网站模板,网址查询网站,甘肃病毒感染最新消息,哈尔滨优化建站哪家专业列举几个关于Java Collections的常见问题并给出答案。 1. 什么时候用LinkedList,什么时候用ArrayList? ArrayList是使用数组实现的list,本质上就是数组。ArrayList中的元素可以通过索引随机获取一个元素。但是如果该数组已满,当添…

列举几个关于Java Collections的常见问题并给出答案。

1. 什么时候用LinkedList,什么时候用ArrayList?

ArrayList是使用数组实现的list,本质上就是数组。ArrayList中的元素可以通过索引随机获取一个元素。但是如果该数组已满,当添加新元素时需要分配一个新的数组然后将原来数组的元素移动过去,需要O(n)的时间复杂度。添加或删除一个元素需要移动数组中的其他元素。这是ArrayList最大的缺点。

LinkedList是一个双向链表。因此,当需要获取list中某个元素,需要从头到尾遍历list。另一方面,在链表中添加或删除元素很快,只需要O(1)的时间复杂度。从空间上来说,在链表中一个节点需要两个额外的指针来指向它的previous和next节点。

总结:

时间复杂度来说,如果对list增加或删除操作较多,优先用LinkedList;如果查询操作较多,优先用ArrayList。

空间复杂度来说,LinkedList会占用较多空间。

2. 如何边遍历边移除Collection中的元素

边遍历边修改Collection的唯一正确方式是使用Iterator.remove()方法,如下:

1
2
3
4
5
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
    // do something
    it.remove();
}

一种最常见的错误代码如下:

1
2
3
for(Integer i : list){
    list.remove(i)
}

运行以上错误代码会报ConcurrentModificationException异常。这是因为当使用foreach(for(Integer i : list))语句时,会自动生成一个iterator来遍历该list,但同时该list正在被Iterator.remove()修改。在Java中,一般不允许一个线程在遍历collection时另一个线程在修改它。

3. 如何将List转化成int[]?

很多人可能认为只需用List.toArray()即可,其实不然。List.toArray()方法只可能得到Integer[],无法得到int[]。

最简单的方法是使用Apache Commons Lang库中的ArrayUtils

1
int[] array = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

在JDK中,没有捷径。需要注意的是,不能直接使用List.toArray(),因为这样会将List转化成Integer[]而不是int[]。正确的做法如下:

1
2
3
4
int[] array = new int<div class="list "></div>;
for(int i = 0; i < list.size(); i++){
    array[i] = list.get(i);
}

4. 如何将int[]转化成List?

同上,很多人以为只需用Arrays.asList()即可,其实不然。因为不能以int[]作为该方法的参数,要的话也只能是Integer[]。

关于Arrays.asList()方法有如下特性:

  • 1.该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用
  • 2.当使用asList()方法时,数组就和列表链接在一起了。当更新其中之一时,另一个将自动获得更新。因为asList获得的List实际引用的就是数组 注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性。
  • 3.asList得到的数组是的没有add和remove方法的。因为asList返回的List是Arrays中的内部类,而该类并没有定义add和remove方法。

那么如何将int[]转化成List呢?

还是得自己实现:

1
2
3
4
5
int[] array = {1,2,3,4,5};
List<Integer> list = new ArrayList<Integer>();
for(int i: array) {
  list.add(i);
}

5. 过滤一个Collection最好的方法是什么?

如过滤掉list中大于5的整数。

1
2
3
4
5
6
7
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
    int i = it.next();
    if(i > 5) {  //过滤掉大于5的整数
        it.remove();
    }
}

6. 将List转化成Set最简单的方法?

有两种方法,取决于你怎么要怎么定义两个元素相等。第一种方法是将list放入HashSet里,该方法元素是否相等是通过它们的hashCode()来比较的。如果需要自己定义比较的方法,需要用TreeSet

1
Set<Integer> set = new HashSet<Integer>(list);
1
2
Set<Integer> set = new TreeSet<Integer>(aComparator);
set.addAll(list);

7. 如何删除ArrayList中重复的元素?

如果不关心元素在ArrayList中的顺序,可以将list放入set中来删除重复元素,然后在放回list。

1
2
3
Set<Integer> set = new HashSet<Integer>(list);
list.clear();
list.addAll(set);

如果关心元素在ArrayList中的顺序,可以用LinkedHashSet

8. 有序的collection

Java里有很多方法来维持一个collection有序。有的需要实现Comparable接口,有的需要自己指定Comparator。

  1. Collections.sort()可以用来对list排序。该排序是稳定的,并且可以保证nlog(n)的性能。
  2. PriorityQueue提供排序的队列。PriorityQueueCollections.sort()的区别是,PriorityQueue动态维护一个有序的队列(每添加或删除一个元素就会重新排序),但是只能获队列中的头元素。
  3. 如果collection中没有重复的元素,TreeSet是另一个选择。跟PriorityQueue一样的是,TreeSet也动态维护一个有序的集合。可以从TreeSet中获取最大和最小的元素。

总结:Collections.sort()提供一个一次排序的list。PriorityQueueTreeSet动态维护排序的collection。

9. 拷贝list

有两种方法可以用来拷贝list。一种是使用ArrayList构造器。

1
ArrayList<Integer> dstList = new ArrayList<Integer>(srcList);

另一种是使用Collections.copy()

1
2
ArrayList<Integer> dstList = new ArrayList<Integer>(srcList.size());
Collections.copy(dstList, srcList);

需要注意的是,使用该方法的话目标list至少跟源list长度一样长。否则会报IndexOutOfBoundsException异常。

另外有两点需要注意:

  1. 两种方法都是浅拷贝
  2. Collections.copy()方法的两个参数必须都是list,而ArrayList方法参数只要是collection即可,因此ArrayList方法更通用.
http://www.lbrq.cn/news/1465795.html

相关文章:

  • 《动态网站建设》第03章在线测试/代推广app下载
  • 做网站开发的是不是程序员/网站建设教程
  • o2o电子商务模式的特点/知了seo
  • 聚美优品一个专注于做特价的网站/推广公司简介
  • 免费做外贸的网站空间/杭州推广平台有哪些
  • 建设厅证书查询网站/seo优化方案
  • 网站平台建设的实训报告/软件开发外包公司
  • 太原做网站的公司哪家好/网站页面优化内容包括哪些
  • 页面精美的网站/免费建站的网站有哪些
  • 做网站分几种/徐州seo顾问
  • 有知道做网站的吗/品牌运营方案
  • 天眼查官网官网/windows 优化大师
  • 工业和信息化网站备案系统/快速建站工具
  • 怎么做网站下载链接/营销网站建设价格
  • 青海省住房和城乡建设网站/vi设计
  • 做网站怎么跟别人讲价/手机怎么建网站
  • 网站优化怎么做效果才好/百度怎么发广告
  • 北京上云网站建设公司/千锋教育可靠吗
  • wordpress主题weisay simple修改版/东莞seo顾问
  • 网站建设及维护机/搜索引擎优化seo专员招聘
  • 深圳平湖网站建设公司/优化搜索关键词
  • ppt做会动彩字网站/百度关键词热搜
  • 要想提高网站排名应该如何做/网络营销的概述
  • 企业应用平台和系统管理/北京网站seo费用
  • 付费软件免费拿/郑州搜狗关键词优化顾问
  • 江西省网站备案/武汉seo工厂
  • 网站css下载/南昌网站优化公司
  • 小男孩与大人做的网站/长春网站推广公司
  • 成都移动网站建设/好搜seo软件
  • 做爰全过程免费狐狸网站/四川网站制作
  • OpenVLA复现
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • 高性能MCP服务器架构设计:并发、缓存与监控
  • 国产开源大模型崛起:使用Kimi K2/Qwen2/GLM-4.5搭建编程助手
  • 【网安播报】Lazarus Group 利用开源包展开长期供应链间谍战
  • 安装 docker compose v2版 笔记250731