继续这个系列,好久没学习了,懒惰呀。

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的更多相关文章

  1. 《Effective Java》读书笔记 - 11.序列化

    Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...

  2. java collections读书笔记(10) Set

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVgAAADbCAIAAACnXR7VAAAgAElEQVR4nOx9d1hVV9Y3880zb2YmM3 ...

  3. java collections读书笔记(8)collection框架总览(1)

  4. java collections读书笔记(9)collection框架总览(2)

    框架算法: 1)collection接口 add()  Adds an element to the collection.addAll()  Adds a collection of element ...

  5. Java并发读书笔记:线程安全与互斥同步

    目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...

  6. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  7. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  8. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  9. 强化学习读书笔记 - 11 - off-policy的近似方法

    强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...

随机推荐

  1. lua5.2版本在VS2010下的环境搭建

    第一次使用脚本语言,第一次使用解释性语言 公司的现在维护的游戏开发的比较早,采用的lua还是比较早的版本,像NPC脚本系统就是使用lua+luabind结合的module模式,服务器端没涉及到,所以不 ...

  2. Bootstrap页面布局10 - BS表格

    ①了解需要怎样的表格标签结构 ②bootstrap为我们提供了一些类来变换表格样式 1.table中添加 <table class='table'></table> 如图: 2 ...

  3. phpexcel 读取数据

    最近公司做一个客户导入会员的功能,以前导入都是使用csv格式导入的,但是客户反应问题挺多的,普遍是乱码(由于各种系统各种环境可能引起编码问题).最近想着就把这个导入完全改成excel导入,就研究了下p ...

  4. yaf性能测试(wamp环境)

    1实现mvc 出现helloword,成功 2.controller重定向 $get = $this->getRequest()->getQuery("get", &q ...

  5. 通过IP获得IP所在地的三个接口

    http://ip.qq.com/cgi-bin/searchip?searchip1=180.168.144.211 http://ip.taobao.com/service/getIpInfo.p ...

  6. angularJS商品购物车案例

    <!DOCTYPE html> <html ng-app="shopping"> <head lang="en"> < ...

  7. java简单优化和编写规范,自己总结的。

    1.永远不要比较两个浮点数是否相等.它是不安全的.详情google. 2.尽量使用StringBuffer代替String. 3.final类会提高很多效率. 4.try-catch 不应该用来控制程 ...

  8. Magento - Rewrite机制一窥

    看一个url例子 http://localhost/magento/index.php/customer/account/login 这里假定http://localhost/magento/ 是ma ...

  9. 修改OpenCart系统配置

    后台修改admin配置文件和修改根目录下的config.php <?php// HTTPdefine('HTTP_SERVER', 'http://网站域名/');define('HTTP_IM ...

  10. [iOS]如何把App打包成ipa文件,然后App上架流程[利用Application Loader]

    摘自:http://www.cnblogs.com/wangqi1221/p/5240281.html 在上一篇博客已经讲过上传项目了,但是有的时候,需要我们进行打包成ipa包到别的手机上跑(但是前提 ...