文档章节

8Eclipse使用 ArrayList,LinkedList

恋佳
 恋佳
发布于 2015/07/22 14:05
字数 949
阅读 14
收藏 0

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1. 对于Java中的常量的命名规则:所有单词的字母都是大写,如果有多个单词,那么使用下划线连接即可。比如说:</span>

public static final int AGE_0F_PERSON = 20;

2. 在Java中声明final常量时通常都会加上static关键字,这样对象的每个实例都会访问唯一一份常量值。

3. IDE(Integrated Development Environment),集成开发环境。

1) NetBeans。http://netbeans.org/

2) JBuilder。

3) Intellij IDEA

4) Eclipse(日蚀、月蚀)

Eclipse常用配置

1、 智能提示.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW

2、 格式化:括号自动换行

Windows-Preferences->Java-CodeStyle-->Formater>New

Braces nextline

ControlStatement=>general

快捷键 ctrl+shift+F

3、 去掉方法自动填充参数

Windows-Preferences->Java-Editor-ContentAssist-去掉Fill method arguments

快捷键

ctrl+shift+O 自动导入包

按住ctrl 点击对应的类,查看源码

alt+← 回到上一次代码

//* 注释 生成帮助文档 project -》Genrate javadoc

4. 集合中存放的依然是对象的引用而不是对象本身

public class ArrayListTest5
{
	public static void main(String[] args)
	{
		ArrayList list = new ArrayList();
		
		list.add(new Point(2, 3));
		list.add(new Point(2, 2));
		list.add(new Point(4, 4));
		
		for(int i = 0; i < list.size(); i++)
		{
			System.out.println(list.get(i));//调用Point toString方法
<span style="white-space:pre">			</span>
}
		
		System.out.println(list);//调用list toString方法
	}
}

5. ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象,实际上是构建一个空的Object类型的数组

public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
    }

    /**
     * Constructs an empty list with an initial capacity of ten.
     */
    public ArrayList() {
        super();
        this.elementData = EMPTY_ELEMENTDATA;
    }




6. 当增加元素时,首先确定数组容量(调用ensureCapacityInternal),如果数组容量超过10(DEFAULT_CAPACITY),则对数组进行扩容(grow),并将原数组copy到新的数组中。最后将新增加的元素放在新的数组末尾。(Java1.7、1.8中通过移位(>>1)进行扩容,实际上也相当于把长度变为原来的1.5倍。与1.6不同)

Add源码

/**
     * Appends the specified element to the end of this list.
     *
     * @param e element to be appended to this list
     * @return <tt>true</tt> (as specified by {@link Collection#add})
     */
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }



private void ensureCapacityInternal(int minCapacity) {
        if (elementData == EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }

        ensureExplicitCapacity(minCapacity);
    }

    private void ensureExplicitCapacity(int minCapacity) {
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }
private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)//private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

7. 对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。

public E remove(int index) {
        rangeCheck(index);

        modCount++;
        E oldValue = elementData(index);

        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }



8. 集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。

9. 集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。

10. 关于ArrayList与LinkedList的比较分析

a) ArrayList底层采用数组(顺序表)实现,LinkedList底层采用双向链表实现。

b) 当执行插入或者删除操作时,采用LinkedList比较好。

c) 当执行搜索操作时,采用ArrayList比较好。

LinkedList源码:

public LinkedList() {
    }
public boolean add(E e) {
        linkLast(e);
        return true;
    }
void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }
private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }








 

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

上一篇: 22XML
恋佳
粉丝 0
博文 76
码字总数 62107
作品 0
大连
私信 提问
ArrayList vs. LinkedList vs. Vector

List概览 List,就像它的名字暗示的一样,是一组排列有序的元素。当我们讨论List的时候,很容易将它和Set作比较。Set是一组唯一的而且排列无序的元素。 下图是集合类的层次结构图。你可以总体...

LCZ777
2014/07/30
0
0
ArrayList和LinkedList的区别

大致的区别: ArrayList是实现了基于动态数组的数据结构, LinkedList基于链表的数据结构 对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一...

1314Stone
2017/11/23
0
0
ArrayList与LinkedList

ArrayList与LinkedList都是List接口的实现类 ArrayList是数组队列,相当于动态数组 LinkedList是双向链表结构,也可当作堆栈,队列 当随机访问List时(get和set操作),ArrayList比LinkedLis...

森林之下
2018/11/24
0
0
Java:ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因...

heiyexue
2014/09/09
0
0
Arrylist、linkelist、vector之间的区别

ArrayList,LinkedList是不同步的,而Vector是同步的,Vector适合线程使用, ArrayList和Vector都是使用Objec的数组形式来存储的,当元素数目超出其长度时,Vector缺省情况下自动增长原来一倍...

刘谱_smile
2015/10/23
532
0

没有更多内容

加载失败,请刷新页面

加载更多

在阿里云ecs服务器(linux之centos系统)安装调试nginx

购买阿里云ecs服务器实例 由于这里只是测试,我们就随便买一个(当然我就选最便宜的了,这里的抢占式实例测试完可以直接释放) 选择centos7.6镜像 点击下一步:网络和安全组 接下来选中开通h...

祖达
昨天
2
0
【阴阳师】真蛇10层记录

蛇切黑体系 追月神 散件一速,速度越高越好(220+) 镰鼬 招财二速,速度211以上; 山兔 火灵三速,速度180-200均可; 丑女 心眼四速,速度170左右即可; 大蛇 蚌精暴击套。速度高于阴阳师即...

Areya
昨天
4
0
js动态设置元素高度

this.$refs.xxx.style.height= this.contentHeight; 元素需要绑定

Carbenson
昨天
2
0
今天的学习

今天学到了ci框架中的查询语句的where条件语句: 1、$this->db->select('')->from('')->where('id = ??')->get()->result_array();2、$this->db->select('')->from('')->where('id', '??'......

墨冥
昨天
2
0
MySQL在高并发下的订单撮合、系统使用、共享锁与排他锁保证数据一致性

前序 距离上次择文发表,两月余久。2018年也即将要结束了,目前的工作依然是与区块链应用相关的,也很荣幸在9月初受邀签约出版暂名为《区块链以太坊DApp实战开发》一书,预计在明年年初出版。...

我最喜欢三大框架
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部