一、Java_Collections表的实现

  与c不同Java已经实现并封装了现成的表数据结构,顺序表以及链表。

  1、ArrayList是基于数组的实现,因此具有的特点是:1.有索引值方便查找,对于get和set操作花费常数时间,2.但是其缺点是:插入/删除某个数据的代价比较大。

2、LinkedList是基于双链表实现,因此具有的特点是:1.基于链表方便插入与删除操作开销较小,2.但是不方便索引,不管是索引哪一个元素都需要从头开始逐次查找。

就增删操作下面举个简单例子:给出一个表(具体实现未知),将该表中偶数值的项删除,比如该表中的元素为:1,2,3,4,5,调用该方法后得到元素:1,3,5

//-----------------------------------------------------------

//该代码主要是用来说明顺序表与链表在增删上的操作消耗

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator; /**
* 找到一个表list中偶数值的项,并删除 下面显示逐渐优化的过程 对比顺序表:arrayList与LinkedList。自己把握
*
* @author Administrator
*
*/
public class RemoveEvens {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4); // removeEvensVer2(list); for (int i : list) {
System.out.println(i);
}
} // 基础版本
/*
* 对于ArrayList集合,get方法虽然较快,但是remove的时间消耗为二次时间,
* 对于linkedlist集合,暴露两个问题首先是对get的调用效率不是很高因此例程花费二次时间,而且同时对remove
* 的调用同样低效,因为要到达i的代价是昂贵的。
*/
public static void removeEvensVer1(List<Integer> list) { int i = 0;
// 遍历列表,获得每一个元素
while (i < list.size()) {
// 当前项是偶数,就移除
if (list.get(i) % 2 == 0) {
list.remove(i);
} else {
i++;
}
}
} // 迭代器版本增强版本,避免并发修改异常
// 对于linkedlist的迭代器的remove方法只消耗常数时间项,该方法对于arraylist仍是无可救药 public static void removeEvensVer2(List<Integer> list) {
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
if (iterator.next() % 2 == 0) {
iterator.remove();
}
}
} // 并发修改异常,一般这里会出现,主要是由于迭代器的引用失效
public static void removeEvensVer3(List<Integer> list) {
// ListIterator<Integer> listIterator = list.listIterator();
//增强for本质上是使用迭代器实现,而list的remove方法导致list发生变化,进一步导致原list的迭代器引用
//发生变化,导致并发异常。
for (Integer x : list) {
if (x % 2 == 0) {
list.remove(x);
}
}
}
}

最新文章

  1. c#线程带参数
  2. SWFUpload多图上传、C#后端跨域传文件带参数
  3. 安装并配置前端自动化工具——grunt
  4. Java 如何连接 SQL 2008 R2
  5. 韦东山yy公开课笔记(1)--各种杂的问题
  6. delphi读写文本文件
  7. iOS网络开发-打造自己的视频客户端
  8. 其他信息: Error creating context &#39;spring.root&#39;: 未能加载文件或程序集“EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项
  9. LeetCode---------Longest Substring Without Repeating Characters解法
  10. 80端口被system 占用
  11. 详解m4文件
  12. 解决跨站脚本注入,跨站伪造用户请求,sql注入等http安全漏洞
  13. PEP8 - Python编码规范
  14. Fatal error: cannot initialize AIO sub-system
  15. python中读取文件的read、readline、readlines方法区别
  16. [UFLDL] Generative Model
  17. JPA的配置文件
  18. lnmp之php5.6.29安装
  19. linux基础命令学习(六)文件的特殊属性
  20. Keras学习-1

热门文章

  1. 【RabbitMQ】 WorkQueues
  2. SQL常用代码段
  3. JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
  4. Session与Cookie概念
  5. RabbitMQ学习之集群部署
  6. UE4入门与精通
  7. 也谈微信小程序
  8. cookie和session简单的用法
  9. SQL用先进先出存储过程求出库数量
  10. Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化