理解Java中的List

ArrayList属于List的一个实现,是一种无序的可重复的,基于数组的列表,特点是随机取出非常灵活,缺点是增加和删除会自动进行移位操作,在这个方面比链表效率差。通过完成ThinkingInJava中的习题进一步了解ArrayLIst,以下是代码:

public class ListFeature {

    public static void main(String[] args) {
        //声明一个Random对象并初始化
        Random rand = new Random(47);
        //声明一个List接口并初始化一个空的ArrayList
        List<Integer> ints = new ArrayList<Integer>();
        //用Collections中的addAll静态方法填充ints,List接口也是Collection接口的一个实现
        Collections.addAll(ints, 1, 2, 50, 100, 200, new Integer(500), new Integer(1000));
        //第一行应输出 [1, 2, 50, 100, 200, 500, 1000]
        System.out.println("1: "+ints);
        //声明一个Integer对象并初始化一个9
        Integer i = 9;
        //ints末尾补充一个i
        ints.add(i);
        //第二行应该输出[1, 2, 50, 100, 200, 500, 1000, 9]
        System.out.println("2: "+ints);
        //第三行对ints调用了其contains方法,ints中是否包含i对象,应输出true
        System.out.println("3: "+ints.contains(i));
        //ints中移除i对象,调用其remove方法,传入需要移除的对象的引用
        ints.remove(i);
        //声明一个Integer对象并传递ints第三个元素的引用
        Integer ii = ints.get(2);
        //第四行应该输出50 2
        System.out.println("4: "+ii+" "+ints.indexOf(ii));
        Integer i1 = new Integer(9);
        //第五行,ints中无i1对象,故传递i1的引用无法定位对象,输出-1
        System.out.println("5: "+ ints.indexOf(i1));
        //第六行同理第五行,无法移除,输出false
        System.out.println("6: "+ ints.remove(i1));
        //第七行中的ii是从ints中获取的引用,故可以移除
        System.out.println("7: "+ ints.remove(ii));
        System.out.println("8: "+ints);
        //向ints指定位置新增一个对象
        ints.add(3, new Integer(99));
        System.out.println("9: "+ints);
        //调用ints的subList方法,按照指定区间分割列表
        List<Integer> sub = ints.subList(1, 4);
        System.out.println("subList: "+sub);
        //第十行,ints中明显没有sub对象,故输出false
        System.out.println("10: "+ints.contains(sub));
        //第十一行,ints中包含sub列表中的对象,故输出true
        System.out.println("11: "+ints.containsAll(sub));
        //打乱sub中对象的排列
        Collections.shuffle(sub, rand);
        System.out.println("shuffled subList: "+sub);
        //第十二行,ints依然包含sub中的对象,故sub中的排列顺序不影响containsAll的结果
        System.out.println("12: "+ints.containsAll(sub));
        //构造函数传入一个列表引用即可复制列表
        List<Integer> copy = new ArrayList<Integer>(ints);
        System.out.println("copyList: "+copy);
        System.out.println("sub: "+sub);
        //交集操作,copy中保留sub中出现的对象
        copy.retainAll(sub);
        System.out.println("13: "+copy);
        copy = new ArrayList<Integer>(ints);
        copy.remove(2);
        System.out.println("14: "+copy);
        //copy中移除sub中出现的对象
        copy.removeAll(sub);
        System.out.println("15: "+copy);
        //copy用指定值替换指定位置
        copy.set(1, 998);
        System.out.println("16: "+copy);
        //copy从指定位置插入一个列表,挤开操作
        copy.addAll(2, sub);
        System.out.println("17: "+copy);
        System.out.println("18: "+ints.isEmpty());
        //清空列表
        ints.clear();
        System.out.println("19: "+ints);
        System.out.println("20: "+ints.isEmpty());
        List<Integer> intsNew = new ArrayList<Integer>();
        Collections.addAll(intsNew, 1, 2, 3, 4);
        //从0开始插入一个列表
        ints.addAll(intsNew);
        System.out.println("21: "+ints);
        //通过toArray方法,将ints列表转为数组
        Object[] o = ints.toArray();
        System.out.println("22: "+o[3]);
        Integer[] tmp = {};
        //通过toArray方法,将ints列表转为指定类型数组
        Integer[] ii1 = ints.toArray(tmp);
        System.out.println("23: "+ii1[3]);
    }

}

目前我对于ArrayList的理解就是要学会使用,它就是用来存放对象的容器,它实现了List中的方法,也实现了Collection中的方法,毫无疑问了解全部的API才能活用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值