第21章 泛型 1
21.1引言 1
21.2动机和优点 1
21.3定义泛型类和接口 3
21.4泛型方法 4
21.5原始类型和向后兼容 5
21.6通配泛型 6
21.7消除泛型和对泛型的限制 8
21.8实例学习:泛型矩阵类 10
关键术语 14
本章小结 14
复习题 15
编程练习题 16
第22章Java集合框架 17
22.1引言 17
22.2集合 17
22.3 Collection接口和Abstract-Collection类 18
22.4规则集 19
22.4.1散列集HashSet 19
22.4.2链式散列集LinkedHashSet 23
22.4.3树形集TreeSet 23
22.5比较器接口Comparator 25
22.6线性表 26
22.7线性表和集合的静态方法 30
22.8规则集和线性表的性能 32
22.9向量类Vector和栈类Stack 33
22.10队列和优先队列 35
22.11图 37
22.12单元素和不可变的集合和图 42
关键术语 42
本章小结 42
复习题 43
编程练习题 46
第23章 算法效率 49
23.1引言 49
23.2大O符号 49
23.3举例:确定大O 50
23.4分析算法的时间复杂度 52
23.4.1分析二分查找算法 52
23.4.2分析选择排序算法 52
23.4.3分析插入排序算法 52
23.4.4分析汉诺塔问题 53
23.4.5比较常用的增长函数 53
23.5实例学习:找出斐波那契数 54
23.6实例学习:求最大公约数 56
23.7实例学习:找出素数 59
23.8实例学习:最近的点对 64
23.9预览其他算法 66
关键术语 66
本章小结 66
复习题 67
编程练习题 68
第24章 排序 71
24.1引言 71
24.2冒泡排序 71
24.3归并排序 73
24.4快速排序 76
24.5堆排序 79
24.5.1对堆排序 79
24.5.2添加一个新结点 80
24.5.3删除根结点 80
24.5.4 Heap类 81
24.5.5使用Heap类排序 83
24.5.6堆排序的时间复杂度 84
24.6桶排序和基数排序 84
24.7外部排序 85
24.7.1实现第1步 86
24.7.2实现第1 1步 87
24.7.3合并两步 89
24.7.4外部排序分析 91
关键术语 92
本章小结 92
复习题 92
编程练习题 93
第25章 线性表、栈、队列和优先队列 95
25.1引言 95
25.2线性表的一般特性 95
25.3数组线性表 98
25.4链表 102
25.4.1结点 103
25.4.2 LinkedList类 104
25.4.3实现MyLinkedList 105
25.4.4 MyArrayList和MyLinkedList 112
25.5链表的变体 112
25.6栈和队列 113
25.7优先队列 116
25.8实例学习:计算表达式 117
本章小结 121
复习题 121
编程练习题 122
第26章 二叉查找树 125
26.1引言 125
26.2二叉查找树 125
26.2.1表示二叉查找树 126
26.2.2查找一个元素 127
26.2.3在BST中插入一个元素 127
26.2.4树的遍历 128
26.2.5 BinaryTree类 129
26.3删除BST中的一个元素 137
26.4 Tree的可视化 141
26.5迭代器 144
26.6实例学习:数据压缩 146
关键术语 150
本章小结 150
复习题 150
编程练习题 150
第27章 图及其应用 154
27.1引言 154
27.2基本的图术语 155
27.3图的表示 156
27.3.1顶点的表示 156
27.3.2边的表示:边的数组 157
27.3.3边的表示:Edge对象 157
27.3.4边的表示:邻接矩阵 157
27.3.5边的表示:邻接线性表 158
27.4图建模 159
27.5图的可视化 168
27.6图的遍历 171
27.7深度优先搜索 171
27.7.1深度优先搜索算法 171
27.7.2深度优先搜索的实现 172
27.7.3深度优先搜索的应用 174
27.8 广度优先搜索 174
27.8.1广度优先搜索算法 174
27.8.2广度优先搜索的实现 175
27.8.3广度优先搜索的应用 177
27.9实例学习:九个硬币反面的问题 177
27.10实例学习:骑士旅行问题 181
关键术语 187
本章小结 187
复习题 188
编程练习题 188
第28章 加权图及其应用 193
28.1引言 193
28.2加权图的表示 193
28.2.1加权边的表示:边数组 193
28.2.2加权邻接矩阵 194
28.2.3优先邻接链表 194
28.3 WeightedGraph类 195
28.4最小生成树 201
28.4.1最小生成树算法 201
28.4.2 MST算法的实现 203
28.5寻找最短路径 206
28.5.1最短路径算法 206
28.5.2最短路径算法的实现 209
28.6实例学习:加权的九枚硬币反面问题 212
关键术语 215
本章小结 215
复习题 215
编程练习题 216
第29章 多线程 220
29.1引言 220
29.2线程的概念 220
29.3创建任务和线程 221
29.4 Thread类 223
29.5举例:闪烁文本 225
29.6 GUI事件分发线程 226
29.7实例学习:带音频的时钟 227
29.8线程池 230
29.9线程同步 232
29.9.1 synchronized关键字 234
29.9.2同步语句 234
29.10利用加锁同步 235
29.11线程间协作 236
29.12实例学习:生产者/消费者 240
29.13阻塞队列 242
29.14信号量 244
29.15避免死锁 245
29.16线程的状态 245
29.17同步集合 246
29.18 SwingWorker 247
29.19使用JProgressBar显示进度 250
关键术语 253
本章小结 253
复习题 253
编程练习题 250
第30章 网络 258
30.1引言 258
30.2客户端/服务器计算 258
30.2.1服务器套接字 259
30.2.2客户端套接字 259
30.2.3通过套接字进行数据传输 260
30.2.4客户端/服务器举例 260
30.3 InetAddress类 264
30.4服务多个客户 265
30.5 applet客户端 268
30.6发送和接收对象 270
30.7从Web服务器上读取文件 274
30.8 JEditorPane类 276
30.9实例学习:分布式井字游戏 278
本章小结 288
复习题 289
编程练习题 289
第31章 国际化 292
31.1引言 292
31.2 Locale类 292
31.3显示日期和时间 294
31.3.1 TimeZone类 294
31.3.2 DateFormat类 294
31.3.3 Simple DateFormat类 295
31.3.4 DateFormatSymbols类 295
31.3.5举例:显示国际时钟 296
31.3.6举例:显示日历 299
31.4格式化数字 304
31.4.1普通数字格式 304
31.4.2货币格式 305
31.4.3百分比格式 305
31.4.4转换数字 306
31.4.5 DecimalFormat类 306
31.4.6举例:格式化数字 306
31.5资源包 309
31.6字符编码 315
关键术语 316
本章小结 316
复习题 317
编程练习题 317
第32章JavaBeans和bean事件 320
32.1引言 320
32.2 JavaBeans 320
32.3 bean属性 321
32.3.1属性的命名方式 321
32.3.2属性和数据域 321
32.4 Java事件模型回顾 322
32.4.1事件类和事件监听器接口 322
32.4.2源组件 323
32.4.3监听器组件 323
32.5创建自定义源组件 324
32.6创建自定义事件组 328
关键术语 332
本章小结 332
复习题 332
编程练习题 333
第33章 容器、布局管理器和边框 336
33.1引言 336
33.2 Swing容器的结构 336
33.2.1 JFrame 337
33.2.2 JApplet 337
33.2.3 JPanel 338
33.3布局管理器 338
33.3.1 CardLayout 339
33.3.2BoxLayout 341
33.3.3使用null布局管理器 344
33.4创建自定义布局管理器 345
33.5 JScrollPane 350
33.6 JTabbedPane 353
33.7 JSplitPane 355
33.8 Swing边框 357
本章小结 364
复习题 364
编程练习题 365
第34章 菜单、工具栏和对话框 368
34.1引言 368
34.2菜单 368
34.2.1创建菜单 368
34.2.2图标、热键和快捷键 370
34.2.3举例:使用菜单 371
34.3弹出式菜单 373
34.4 JToolBar 375
34.5使用Action接口处理动作事件 377
34.6 JOptionPane对话框 380
34.6.1消息对话框 381
34.6.2确认对话框 382
34.6.3输入对话框 382
34.6.4选项对话框 383
34.6.5举例:创建JOptionPane对话框 384
34.7创建自定义对话框 386
34.8 JColorChooser 389
34.9 JFileChooser 390
本章小结 394
复习题 395
编程练习题 395
第35章MVC和Swing模型 398
35.1引言 398
35.2 MVC 398
35.3 MVC的变体 404
35.4 Swing的模型一视图一控件体系结构 404
35.5 JSpinner 406
35.6微调文本域模型和编辑器 407
35.6.1 Spin nerListModel 408
35.6.2 SpinnerNumberModel 408
35.6.3 Spin ne rDateModel 409
35.6.4微调文本域编辑器 410
35.6.5举例:使用微调文本域模型和编辑器 410
35.7 JList及其模型 412
35.7.1 JList的构造方法、属性和方法 413
35.7.2列表框布局方向 413
35.7.3列表框选择模式和列表框选择模型 414
35.7.4举例:列表框属性演示 414
35.8列表模型 416
35.9列表框单元格绘制器 419
35.10 JComboBox及其模型 422
关键术语 425
本章小结 425
复习题 426
编程练习题 426
第36章JTable和JTree 430
36.1引言 430
36.2 JTable 430
36.3表格模型和表格列模型 435
36.4自动排序和过滤 438
36.5实例学习:修改表格的行和列 440
36.6表格绘制器和编辑器 445
36.7自定义表格绘制器和编辑器 447
36.8表格模型事件 449
36.9 JTree 452
36.10 TreeModel和DefaultTreeModel 455
36.11 TreeNode、 MutableTreeNode和DefaultMutableTreeNode 457
36.12 TreePath和TreeSelectionModel 460
36.13实例学习:修改树 462
36.14树结点的绘制和编辑 465
36.15树事件 467
本章小结 467
复习题 467
编程练习题 468
第37章Java数据库程序设计 471
37.1引言 471
37.2关系数据库系统 471
37.2.1关系结构 472
37.2.2完整性约束 473
37.3 SQL 474
37.3.1在MySQL上创建用户账户 475
37.3.2创建数据库 476
37.3.3创建和删除表 476
37.3.4简单插入、更新和删除 477
37.3.5简单查询 478
37.3.6比较运算符和布尔运算符 479
37.3.7运算符like、 between-and和is null 479
37.3.8 列的别名 480
37.3.9算术运算符 480
37.3.10显示互不相同的元组 480
37.3.11显示有序元组 481
37.3.12联结表 481
37.4 JDBC 482
37.4.1使用JDBC开发数据库应用程序 483
37.4.2通过Java applet访问数据库 486
37.5 PreparedStatement 488
37.6 CallableStatement 491
37.7获取元数据 493
37.7.1数据库元数据 493
37.7.2获取数据库表 494
37.7.3结果集元数据 495
关键术语 496
本章小结 496
复习题 497
编程练习题 498
附录A Java关键字 500
附录B ASCII码字符集 501
附录C运算符优先级表 502
附录D Java修饰符 503
附录E特殊浮点值 504
附录F数系 505