java collections读书笔记(11) Lists
继续这个系列,好久没学习了,懒惰呀。
Set接口,实际上是collection 类别中最简单的一个接口,因为它并没有比Collection 接口增加任何的内容,相对而言,大家可能更喜欢List接口和它的扩展:ArrayList和LinkedList。
List加入了位置属性,从而,可以有多种的排序可能。因此,除了可以使用Iterator获取元素之外,还可以使用ListIterator<E> ,通过index,获取指定位置的元素。
在新的框架里,ArrayList,是用来替代vector的。
ArrayList is the replacement for Vector in the new framework. It represents an
unsynchronized vector where the backing store is a dynamically growable array. On the other hand is
LinkedList, which, as its name implies, is backed by the familiar linked list data structure.
ArrayList:
显然,ArrayList是替代Vector的,相对Vector而言,ArrayList是非同步的。另外,如果想快速的,随机的访问其中的元素,ArrayList是可以的(前提是不要有大量频繁的元素插入和删除等操作,否则,考虑LinkedList)。
ArrayList是扩展自AbstractList.而且,支持重复的元素。
1)ArrayList的初始化
主要是这么几个构造函数:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/*newCapacity= (oldCapacity * 3)/2 + 1.*/
public ArrayList() {
this(10);
}
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
一个容易犯错的例子:
String elements[] = {"Schindler's List", "Waiting List", "Shopping List",
"Wine List"};
List list = new ArrayList(Arrays.asList(elements));
这个时候,aslist返回的arraylist,是arrays的内部类,不是java.util下的arraylist,具体见:
http://www.cnblogs.com/hashmap/articles/2162444.html
2)增加元素
public boolean add(Object element)
public boolean add(int index, Object element)
3)删除元素
ArrayList mylist=new ArrayList();
mylist.add("wcf1");
mylist.add("wcf2");
mylist.add("wcf3");
mylist.add("wcf4");
mylist.add("wcf5");
mylist.add("wcf6");
System.out.println(mylist);
mylist.add("wcf3");
System.out.println(mylist);
mylist.remove("wcf3");
System.out.println(mylist);
[wcf1, wcf2, wcf3, wcf4, wcf5, wcf6]
[wcf1, wcf2, wcf3, wcf4, wcf5, wcf6, wcf3]
[wcf1, wcf2, wcf4, wcf5, wcf6, wcf3]
4)列举
public Iterator iterator()
public ListIterator listIterator()
public ListIterator listIterator(int index)
因为list是排序的,因此,iterator和listIterator的操作结果是一样的。
他们的区别,见:http://www.cnblogs.com/aomi/p/3166292.html
LinkedList
ArrayList和LinkedList在作为List接口 使用的时候,主要区别就是随机访问(按照index进行查找删除等等操作)效率,ArrayList的随机访问效率当然会高;如果你的程序很少应用随机访 问,那使用LinkedList不会是比ArrayList更差的选择。ArrayList最没有效率的地方就是频繁的添加操作,这个操作可能会引起 ArrayList的扩容,扩容的时候会copy数组浪费点时间,而LinkedList没有扩容时的问题。
还有一个地方不同:LinkedList实现了Deque接口,如果我们需要队列操作,那声明LinkedList的实现为Deque类型是非常方便的,ArrayList没有实现这个接口。
这是个链表结构。
ListIterator

a)来自Iterator
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
b)可以倒序
ListIterator iter = list.listIterator(list.size());
while (iter.hasPrevious()) {
System.out.println(iter.previous());
}
java collections读书笔记(11) Lists的更多相关文章
- 《Effective Java》读书笔记 - 11.序列化
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...
- java collections读书笔记(10) Set
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVgAAADbCAIAAACnXR7VAAAgAElEQVR4nOx9d1hVV9Y3880zb2YmM3 ...
- java collections读书笔记(8)collection框架总览(1)
- java collections读书笔记(9)collection框架总览(2)
框架算法: 1)collection接口 add() Adds an element to the collection.addAll() Adds a collection of element ...
- Java并发读书笔记:线程安全与互斥同步
目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...
- 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- 强化学习读书笔记 - 11 - off-policy的近似方法
强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...
随机推荐
- oracle 多表查询
1.注意点 在查询过程中,不确定数据库表中的数据量,先查询数据量,数据量较大,则不能直接查询(select * from emp),如果数据量较大,直接查询容易造成死机或者数据读取较慢,如果较小可以查 ...
- 图片lightbox2
1. 官网下载 http://lokeshdhakar.com/projects/lightbox2/ 2.引入 css jquery js 3. HTML格式 <a href=" ...
- P1379 八数码问题
aoapc上的八数码问题,在luogu上也有类似的题,p1379,经典题目,lrj给出了一个算法,同时给出了三种判重的方法.本来想用std::queue改写一下,但是出了各种问题,只好抄代码ac掉这道 ...
- SQL控制语句中内置函数讲解
一.伪表.系统内置的只有一行一列数据的表.常用来执行函数. select 函数名 from dual 注:以下所有函数为了方便理解均用 伪表 做为事例! 二. 时间函数 1.sysdate:获取数据库 ...
- 【转】C# 解析JSON方法总结
http://blog.csdn.net/jjhua/article/details/51438317 主要参考http://blog.csdn.NET/joyhen/article/details/ ...
- sql索引组织
select p.*, p.partition_id, c.object_id,OBJECT_NAME(c.object_id) objectName,c.name,c.column_id,pc.m ...
- 通过全局设置过滤器,就能让所有窗口都可移动,而不是都要继承指定QDialog
#include "appinit.h" #include <QMouseEvent> #include <QApplication> #include & ...
- Node的Buffer
var buf3 = new Buffer([1,2,3,4,-10,256],'utf8');//默认为utf8 console.log(buf3[0]);//正常的范围是0~255 console ...
- jstl标签库基础教程及其使用代码(一)。
概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...
- ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明
原文:ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 By 李远祥 ArcGIS Por ...