Java Hour 19 List
有句名言,叫做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的更多相关文章
- Java SE 19 新增特性
Java SE 19 新增特性 作者:Grey 原文地址: 博客园:Java SE 19 新增特性 CSDN:Java SE 19 新增特性 源码 源仓库: Github:java_new_featu ...
- Java SE 19 虚拟线程
Java SE 19 虚拟线程 作者:Grey 原文地址: 博客园:Java SE 19 虚拟线程 CSDN:Java SE 19 虚拟线程 说明 虚拟线程(Virtual Threads)是在Pro ...
- Java虚拟机19:再谈四种引用状态
JVM的四种引用状态 在Java虚拟机5:Java垃圾回收(GC)机制详解一文中,有简单提到过JVM的四种引用状态,当时只是简单学习,知道有这么一个概念,对四种引用状态理解不深.这两天重看虚拟机这部分 ...
- Java程序设计19——类的加载和反射-Part-A
1 本文概要 本章介绍Java类的加载.连接和初始化的深入知识,并重点介绍Java反射相关的内容.本章知识偏底层点,这些运行原理有助于我们更好的把我java程序的运行.而且Java类加载器除了根加载器 ...
- Thinking in Java——笔记(19)
Enumerated Types Basic enum features When you create an enum, an associated class is produced for yo ...
- Java多线程19:定时器Timer
前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单.定时更新某些缓存.定时清理一批不活跃用户等等.定时计划任务功能在Java中主要使用的就是Tim ...
- JAVA进阶19
1.冒泡排序 package cn.zh.abstrac; import java.util.Arrays; //冒泡排序 public class Demo019 { public static v ...
- Java基础19:Java集合框架梳理
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- java 多线程 19: ReentrantLock 与 Condition
ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. Reentran ...
随机推荐
- xcrun: error: active developer path ("/Volumes/Xcode/Xcode-beta.app/Contents/Developer") does not exist, use `xcode-select --swi
xcrun: error: active developer path ("/Volumes/Xcode/Xcode-beta.app/Contents/Developer") d ...
- Redis 数据库
Redis 服务器 Remote Dictionay Server Redis是一个key-value持久化产品,通常被称为数据结构服务器. Redis的key是string类型: ...
- PHP文件包含漏洞剖析
一. 什么才是”远程文件包含漏洞”?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的. ...
- WPF 数据绑定基础
纯理论,可能会枯燥. .net 技术群: 199281001 ,欢迎加入. 1.目标对象一定是派生自DependencyObject的对象,并且目标属性必须是依赖属性,否则数据绑定操作将会失 败. ...
- object-c 的ARC 问答/介绍
原文:http://blog.csdn.net/kmyhy/article/details/8895606 概念" Clangstatic analyzer "是一个非常有用的查找 ...
- oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏!
oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏! ------------------------------------------------------------------ ...
- #iPhone6与iPhone6Plus适配#如何在Xcode 6中创建 PCH 文件
本文永久链接http://www.cnblogs.com/ChenYilong/p/4008086.html 新建文件 ⌘+N选择 iOS/Mac -> Other -> PCH Fi ...
- Hadoop之 hdfs 系统
一.NameNode维护着2张表: 1.文件系统的目录结构,以及元数据信息 2.文件与数据块列表的对应关系 存放在fsimage中,在运行的时候加载到内存中的. 操作日志写到edits中 二.Da ...
- cocos2d-x创建精灵动画方式汇总
1.创建精灵框架缓存,并向其中添加相应的动画文件(plist),最后,通过动画集缓存生产动画 CCSpriteFrameCache *cache = CCSpriteFrameCache::share ...
- CSS包含块containing block详解
“包含块(containing block)”,W3c中一个很重要的概念,今天带大家一起来好好研究下. 初步理解 在 CSS2.1 中,很多框的定位和尺寸的计算,都取决于一个矩形的边界,这个矩形,被称 ...