有句名言,叫做10000小时成为某一个领域的专家。姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧。

本文作者Java 现经验约为19 Hour,请各位不吝赐教。

List

ArrayList, 在随机取数据的时候有优势,但是在中间插入和移除数据的时候就慢了。

LinkedList,在中间插入和移除数据的时候有优势,但是随机获取数据的时候就慢了。同时LinkedList 有更多的特性可以使用。

这个显然是由其数据结构所决定的,但是我们关注.NET 的时候从来没有关注过这个区别。

.NET 中一般直接使用new List<T>, 这里究竟是ArrayList 还是LinkedList 呢?

当然Thinking In Java 的代码自然也是极好的:

List Feature

public class ListFeatures {
    public static void main(String[] args) {
        Random rand = new Random(47);
        List<Pet> pets = Pets.arrayList(7);
        Print.print("1: " + pets);
        Hamster h = new Hamster();
        pets.add(h); // Automatically resizes
        Print.print("2: " + pets);
        Print.print("3: " + pets.contains(h));
        pets.remove(h); // Remove by object
        Pet p = pets.get(2);
        Print.print("4: " + p + " " + pets.indexOf(p));
        Pet cymric = new Cymric();
        Print.print("5: " + pets.indexOf(cymric));
        Print.print("6: " + pets.remove(cymric));
        // Must be the exact object:
        Print.print("7: " + pets.remove(p));
        Print.print("8: " + pets);
        pets.add(3, new Mouse()); // Insert at an index
        Print.print("9: " + pets);
        List<Pet> sub = pets.subList(1, 4);
        Print.print("subList: " + sub);
        Print.print("10: " + pets.containsAll(sub));
        Collections.sort(sub); // In-place sort
        Print.print("sorted subList: " + sub);
        // Order is not important in containsAll():
        Print.print("11: " + pets.containsAll(sub));
        Collections.shuffle(sub, rand); // Mix it up
        Print.print("shuffled subList: " + sub);
        Print.print("12: " + pets.containsAll(sub));
        List<Pet> copy = new ArrayList<Pet>(pets);
        sub = Arrays.asList(pets.get(1), pets.get(4));
        Print.print("sub: " + sub);
        copy.retainAll(sub);
        Print.print("13: " + copy);
        copy = new ArrayList<Pet>(pets); // Get a fresh copy
        copy.remove(2); // Remove by index
        Print.print("14: " + copy);
        copy.removeAll(sub); // Only removes exact objects
        Print.print("15: " + copy);
        copy.set(1, new Mouse()); // Replace an element
        Print.print("16: " + copy);
        copy.addAll(2, sub); // Insert a list in the middle
        Print.print("17: " + copy);
        Print.print("18: " + pets.isEmpty());
        pets.clear(); // Remove all elements
        Print.print("19: " + pets);
        Print.print("20: " + pets.isEmpty());
        pets.addAll(Pets.arrayList(4));
        Print.print("21: " + pets);
        Object[] o = pets.toArray();
        Print.print("22: " + o[3]);
        Pet[] pa = pets.toArray(new Pet[0]);
        Print.print("23: " + pa[3].id());
    }
}

我们可以看到好多List 的feature,当然就我使用.NET 的经验来说,很多都是用不上的。

Java Hour 19 List的更多相关文章

  1. Java SE 19 新增特性

    Java SE 19 新增特性 作者:Grey 原文地址: 博客园:Java SE 19 新增特性 CSDN:Java SE 19 新增特性 源码 源仓库: Github:java_new_featu ...

  2. Java SE 19 虚拟线程

    Java SE 19 虚拟线程 作者:Grey 原文地址: 博客园:Java SE 19 虚拟线程 CSDN:Java SE 19 虚拟线程 说明 虚拟线程(Virtual Threads)是在Pro ...

  3. Java虚拟机19:再谈四种引用状态

    JVM的四种引用状态 在Java虚拟机5:Java垃圾回收(GC)机制详解一文中,有简单提到过JVM的四种引用状态,当时只是简单学习,知道有这么一个概念,对四种引用状态理解不深.这两天重看虚拟机这部分 ...

  4. Java程序设计19——类的加载和反射-Part-A

    1 本文概要 本章介绍Java类的加载.连接和初始化的深入知识,并重点介绍Java反射相关的内容.本章知识偏底层点,这些运行原理有助于我们更好的把我java程序的运行.而且Java类加载器除了根加载器 ...

  5. Thinking in Java——笔记(19)

    Enumerated Types Basic enum features When you create an enum, an associated class is produced for yo ...

  6. Java多线程19:定时器Timer

    前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单.定时更新某些缓存.定时清理一批不活跃用户等等.定时计划任务功能在Java中主要使用的就是Tim ...

  7. JAVA进阶19

    1.冒泡排序 package cn.zh.abstrac; import java.util.Arrays; //冒泡排序 public class Demo019 { public static v ...

  8. Java基础19:Java集合框架梳理

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  9. java 多线程 19: ReentrantLock 与 Condition

    ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. Reentran ...

随机推荐

  1. hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)

    题意: 求解最大递增子序列. 例如:3 1 3 2 输入 3  个数 1 3 2 则递增子序列有 {1} {3} {2} {1 3} {1 2} ,故输出子序列的最大和 4 解题思路: x[n](n个 ...

  2. 多一个“点”给IIS与ASP.NET带来的问题

    [IIS] 一个网站如果用的是IIS(假设没有在前端7层负载均衡中对这种场景进行特殊处理),只要在浏览器地址栏中输入这个网站的域名并加上“.”,比如:www.cnblogs.com. ,就会引发“Ba ...

  3. (转)DoDataExchange执行时机

    void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...

  4. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  5. sqlplus 配置方法及相关命令

    sqlplus 配置方法及相关命令 1.配置文件 1.1 全局模式什么叫全局模式呢:当我们配置完sqlplus工具加载配置文件后,无论在哪个目录下登陆数据库,您设置[sqlplus提示符样子,在任何目 ...

  6. 将List<int> 转换为用逗号连接为字符串

    List<, , , , }; string str = String.Join(",", testList.ConvertAll<string>(new Con ...

  7. 推荐两款Xcode插件:KSImageNamed & ColorSense

    之前没怎么接触过Xcode插件,最近发现有人给Xcode做了一些方便编程的插件.今天就推荐两个我个人认为比较好的. 1.KSImageNamed 网站地址 KSImageNamed是一款方便填写图片文 ...

  8. Unity导出iOS真机测试教程

    原地址:http://unity3d.9tech.cn/news/2014/0410/40177.html 学 习了两天的Android开发,我感觉Android开发跟IOS开发和.NET平台下的开发 ...

  9. previous_changes方法

    [27] pry(main)> c = Channel.find 6 => #<Channel id: 6, title: "会员", cid: "96 ...

  10. [BZOJ2683][BZOJ4066]简单题

    [BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...