core java
core java 原书第10版翻译
doujingjie
这个作者很懒,什么都没留下…
展开
-
9.4.6 可选操作
9.4.6 可选操作视窗(view)通常都存在一些限制——比如只能读取不能写入,比如不能改变size,比如支持删除但不支持插入(如Map的key view)。如果你试图对一个view进行不合适的操作,将会抛出UnSupportedOperationException。在collection和iterator的API文档中,很多方法被描述为“optional operations”(可选操作)。...翻译 2019-10-11 10:06:49 · 164 阅读 · 0 评论 -
9.5 泛型工具方法
9.5 算法泛型集合接口有一个巨大的优势——你只需要写一次算法(就可以处理很多类型)。例如,求群体中的最大值。以前的程序员通常使用循环来实现这个算法,例如求数组中的最大值:if(a.length = 0) throw new NoSuchElementException();T largest = a[0];for(int i = 1; i < a.length(); i++) i...翻译 2019-10-10 18:42:57 · 121 阅读 · 0 评论 -
9.5.1排序和洗牌
9.5.1排序和洗牌1静态方法Collections.sort可以对实现了List接口的集合进行排序。List<String> staff = new LinkedList<>();fill collectionCollections.sort(staff);该方法假定List的元素实现了Comparable接口。如果想用其他的顺序进行排序,可以使用List接口的...翻译 2019-10-08 23:47:50 · 166 阅读 · 0 评论 -
9.5.2 二分查找
9.5.2 二分查找对于已经排序的数组来说,二分查找效率要明显高于遍历查找。Collections类的binarySearch实现了二分查找算法。必须要注意,被查找的集合首先需要是有序的。该方法的参数是一个实现List接口的集合和一个被查找的元素。集合中的元素可以按照默认的CompareTo方法进行比较,也可以在方法的参数中再提供一个Comparator用于元素间的比较:i = Collec...翻译 2019-10-08 18:20:19 · 126 阅读 · 0 评论 -
9.5.3 简单算法
9.5.3 简单算法Collections类提供了一些简单而有用的算法。包括寻找一个集合中的最大值,从一个list复制元素到另一个list,提供一堆常量值来填充一个容器,将一个list反序。为什么连这么简单的算法都要添加到标准库中?大部分程序员都能通过简单的for循环实现这些算法。我们更喜欢用标准库的方法,因为它们产生更易读的代码。看下面for循环实现的算法:for(int i = 0; i...翻译 2019-10-08 15:54:54 · 113 阅读 · 0 评论 -
9.5.4批量操作
9.5.4 批量操作有几个批量复制和移动元素的操作:coll1.removeAll(coll2);从coll1中移除所有属于coll2的元素。相反:coll1.remainAll(coll2);从coll2中移除所有不属于coll2的元素。这里有一个典型应用。假设你想要求两个集合的交集。首先,创建一个新的Set来存储结果:Set<String> result = new ...翻译 2019-10-08 14:58:04 · 118 阅读 · 0 评论 -
9.5.5 集合和数组的相互转化
9.5.5 集合和数组的相互转化Arrays.asList可以将数组转化为集合:String[] values = ...;HashSet<String> staff = new HashSet<>(Arrays.asList(values));从集合中获得数组更难一些。你可以使用toArray方法:Object[] values = staff.toArray(...翻译 2019-10-08 14:12:14 · 97 阅读 · 0 评论 -
9.5.6 自己写算法
9.5.6 自己写算法当你要写一个接收一个集合类对象作为参数的方法的时候,在方法中要尽量操作接口而不是具体实现。例如,假设你想要用一系列menu item去填充一个JMenu。自然而然的想法会是这样:void fillMenu(JMenu menu, ArrayList<JMenuItem> items){ for(JMenuItem item: items) menu.ad...翻译 2019-10-08 13:13:25 · 191 阅读 · 0 评论 -
9.6.1 Hashtable
9.6 遗留代码在Java发布之初,还没有集合框架之前,就存在很多老的容器类了。它们已经被整合进了集合框架之中:9.6.1 HashtableHashtable提供与HashMap相同的功能,两者方法的使用也几乎相同。唯一的区别在于Hashtable的方法是线程同步的。如果你不需要兼容老代码,则应该使用HashMap来代替Hashtable。如果你需要同步访问,就用ConcurrentHa...翻译 2019-10-08 11:19:42 · 98 阅读 · 0 评论 -
9.6.2 Enumeration
9.6.2 Enumeration老的collection使用Enumeration接口来遍历元素。该接口具有两个方法:hasMoreElement和nextElement。这与Iterator接口及其方法hasNext和next完全雷同。例如,Hashtable类的方法elements返回一个对象用来遍历此table中的values:Enumeration<Employee> ...翻译 2019-10-08 11:20:37 · 185 阅读 · 0 评论 -
9.6.3 Property Map
9.6.3 Property Map属性映射(property map)是一种非常特殊的映射结构。具有三个特性:①key和value均为String②属性表可保存至文件,也可从文件读取③可使用一个二级表作为默认表。在Java中类Properties实现了抽象类型property map。property map普遍用于指定程序的配置选项。java.util.Properties (f...翻译 2019-10-08 08:52:20 · 735 阅读 · 0 评论 -
9.6.4 Stack
9.6.1 Stack栈(Stack)从Java 1.0开始就被加入到标准库中了。它支持著名的的push和pop操作。然而,标准库中的Stack类继承自Vector,这在理论上并不是很合理,因为你可以对Stack执行从Vector继承而来的方法:如insert和remove,而这些方法并不是理论上的栈操作:它们除了在栈顶执行弹栈和压栈操作,还可以在栈的任何位置添加和删除元素。java.util...翻译 2019-10-08 08:07:12 · 71 阅读 · 0 评论 -
9.6.5 BitSet
9.6.5 BitSetBitSet存储一个bit序列(BitSet并不符合数学上的Set定义,BitVector或BitArray这样的名字会更合适)。在需要存储bit序列(例如flags)时,BitSet底层实现比ArrayList<Boolean>更紧凑,因此也更高效。BitSet可以方便地读取、设置和重置单个bit。而用int或long存储bit序列时需要进行繁琐的mask...翻译 2019-10-08 00:47:50 · 77 阅读 · 0 评论