美文网首页
第十一章-持有对象学习总结(1)

第十一章-持有对象学习总结(1)

作者: 落叶刻痕 | 来源:发表于2017-04-27 17:45 被阅读0次

    持有对象:集合持有的只是对象的引用

    List

    ArrayList: 底层以数组实现,擅长随机访问,插入移除时速度较慢
    LinkedList: 底层以链表实现,插入移除时速度较快,提供了优化的顺序访问,随机访问速度较慢

    Collection的构造器可以接受另一个Collection,因此可以使用Arrays.asList()来为构造器产生输入
    可以在Arrays.asList()中间插入一条“线索”,以告诉编译器产生的List类型,这称为显示类型参数说明。
    使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:

    Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList。remove,add,clear等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int), clear()等,所以throw UnsupportedOperationException。

    解决方法是使用Iterator,或者转换为ArrayList

    List list = Arrays.asList(a[]);
    List arrayList = new ArrayList(list);

    List<Pet> pets = Arrays.<Pet>asList(new Pet(),new Pet("cat", "雌", 5),new Pet());
    List<Pet> pets1 = new ArrayList<Pet>(pets);
    Collections.sort(pets);//从小到大排序
    

    subList(int fromIndex, int toIndex) :从指定开始位置到指定结束位置截取一段,注意一点,该方法返回的是原来list的一部分的视图,之所以是视图,双方的动作会互相影响,如下:

    List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three", "four", "five"));
    System.out.println("list: " + list);
    List<String> subList = list.subList(1,4);
    System.out.println("subList: " + subList);
    subList.clear();//clear方法会清理掉集合内所持有对象的引用,并不会真正释放堆内存
    System.out.println("list: " + list);
    

    执行结果:


    执行结果

    可以利用这个特性删除list中的一段区域

    相关文章

      网友评论

          本文标题:第十一章-持有对象学习总结(1)

          本文链接:https://www.haomeiwen.com/subject/nieqzttx.html