实验一线性结构

本文通过具体测试案例,对比分析了ArrayList与LinkedList两种线性表在add、remove等方法上的表现。同时介绍了如何使用这些线性表进行非递减排列的合并及排序。

- No.1

  • 参考博客,对ArrayList和LinkedList进行测试.
  • 调用assertEquals方法,对ArrayList的add,remove和isEmpty方法以及LinkedList的add,remove和contains方法进行测试
    1064024-20171001004014231-1119135272.png

- No.2

  • 对两个非递减线性表进行合并后排序
package ExInClass.FirstExp;

/**
 * Created by dell on 2017/9/26.
 */

import java.util.ArrayList;
import java.util.List;

public class MergeSort {
    public static List <? extends Comparable> mergeSortedList(List <? extends Comparable> aList, List <? extends Comparable> bList) {
        List mergeList = new ArrayList();

        while (true) {
            if (bList.get(0).compareTo(aList.get(0)) < 0) {
                mergeList.add(bList.get(0));
                bList.remove(0);
            } else if (bList.get(0).compareTo(aList.get(0)) == 0) {
                mergeList.add(bList.get(0));
                bList.remove(0);
                mergeList.add(aList.get(0));
                aList.remove(0);
            } else if (bList.get(0).compareTo(aList.get(0)) > 0) {
                mergeList.add(aList.get(0));
                aList.remove(0);
            }
            if (aList.isEmpty() || bList.isEmpty()) {
                break;
            }
        }
        if (!aList.isEmpty()) {
            for (int i = 0; i < aList.size(); i++) {
                mergeList.add(aList.get(i));
            }
        } else if (!bList.isEmpty()) {
            for (int i = 0; i < bList.size(); i++) {
                mergeList.add(bList.get(i));
            }
        }

        return mergeList;
    }

}

1064024-20171001004743372-1112506499.png

- No.3

  • 用数组实现线性表List,并对ArrayList进行测试
package ExInClass.FirstExp;

/**
 * Created by dell on 2017/9/27.
 */
import junit.framework.TestCase;

public class MyArrayListTest extends TestCase {
    public void testIsEmpty() throws Exception {
        assertEquals(true, new ArrayList().isEmpty());
    }
    public void testAdd() throws Exception {
        ArrayList bag = new ArrayList();
        bag.add(1);
        assertEquals(true, bag.add(5));
    }
    @org.junit.Test
    public void testremove() throws Exception {
        ArrayList bag = new ArrayList();
        bag.add(5);
        bag.add(4);
        assertEquals(false, bag.remove(4));
    }

}

1064024-20171001010325106-998119152.png

- No.4

  • 用链表实现线性表List,并对LinkedList进行测试
package ExInClass.FirstExp;

/**
 * Created by dell on 2017/10/1.
 */
import org.junit.Test;

import static junit.framework.TestCase.assertEquals;

public class MyLinkedListTest {
    @Test
    public void add(){
        MyLinkedList LinkedList = new MyLinkedList();
        LinkedList.add(3);
        LinkedList.add(12);
        assertEquals(true, LinkedList.add(2));
    }

    @Test
    public void remove(){
        MyLinkedList LinkedList = new MyLinkedList();
        LinkedList.add(22);
        assertEquals(22, LinkedList.remove());
    }
    @Test
    public void contains(){
        MyLinkedList LinkedList = new MyLinkedList();
        LinkedList.add(12);
        LinkedList.add(21);
        assertEquals(true, LinkedList.contains(21));
    }

}

1064024-20171001011341715-529616928.png

- No.5

  • 分析ArrayList和LinkedList的源代码,首先是先摸清它的属性,再研究它的构造方法和其他的一些方法。
  • 阅读大神的博客让我对源代码的分析有很大的启发
  • 1064024-20171001162555512-1045018622.png
  • 方法之中会调用其他方法是非常常见的,所以关联地来分析是十分有用的,并且还可以对有些门道的方法进行深入的分析
    1064024-20171001162858840-182491167.png

  • 下面是对add(E e)方法的分析
public boolean add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
    }

先调用了ensureCapacity(size+1)方法,后将元素的索引赋给elementData[size],而后size++自增++。++ensureCapacity(size+1)++确保了数组不会出现越界的情况。
根据ensureCapacity的方法名可以知道是确保容量用的。ensureCapacity(size+1)后面的注释可以明白是增加modCount的值

转载于:https://www.cnblogs.com/shuailinzhen/p/7616596.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值