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 ...
随机推荐
- What to call your Academic Event
- ls -alrth 及ls 详解
idcdpi 抓包过程中 用了命令 ls - alrth :命令,所以回头重新学习 ls命令 linux ls和 ll 命令 标签: linuxsocketssolarisbash出版扩展 2 ...
- jQuery类库的设计
目前为止,jquery是js社区中最活跃.用户最多的前端类库,具有链式操作.兼容性.基于数组的操作.强大的插件机制等特点,也是很多前端入门同学最早接触到的库.但是内部如何实现的,一直吸引着我.因此最近 ...
- 前端框架react研究
摘要: 最近公司要做一个嵌套在app中的应用,考虑着用Facebook的react来开发view,所以就研究了下.下面是我在开发中遇到的坑,希望能给你帮助. 项目地址:https://github.c ...
- Word Amalgamation(枚举 + 排序)
Word Amalgamation Time Limit: 1 Sec Memory Limit: 64 MB Submit: 373 Solved: 247 Description In mil ...
- PHP数字格式化,每三位逗号分隔数字,可以保留小数
在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...
- Nginx反向代理 负载均衡
nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个功能就是作为反向代 ...
- [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法
js里方法和属性值为函数,就像一个东西两种称呼一个样,比如土豆,也叫马铃薯,一个样.既然一样,那就可以对对象的方法提取出来为函数,然后把提取出来的函数作为回调函数直接传递给高阶函数. 高阶函数是什么 ...
- [Effective JavaScript 笔记]第37条:认识到this变量的隐式绑定问题
CSVReader示例 需求 CSV(逗号分隔型取值)文件格式是一种表格数据的简单文本表示 张三,1982,北京,中国 小森,1982,东京,日本 吉姆,1958,纽约,美国 现需要编写一个简单的.可 ...
- 获取IOS 设备基本信息
原地址:http://www.cnblogs.com/U-tansuo/p/ios_basis_info.html 1.获取设备类型 (Iphone/ipad 几?) #import "s ...