Java核心技术学习--第八天
第九章 集合
算法
排序与混排
Collection类中的sort方法可以对实现了List接口的集合进行排序。
将所有元素转入数组,对数组进行排序,再将排序后的序列复制回列表。
归并排序稳定,不需要交换相同的元素。
二分查找
集合排好序。
随机访问二分查找才有意义。
如果为二分查找算法提供一个链表,将自动变为线性查找。
简单算法
words.removeIf(w->w.length() <= 3);
words.replaceAll(String::toLowerCase);
java.util.Collections
- static <T extends Comparable<? super T>> T min(Collection elements)
- static <T extends Comparable<? super T>> T max(Collection elements)
- static min(Collection elements, Comparator<? super T> c)
- static max(Collection elements, Comparator<? super T> c)
- static void copy(List<? super T> to, List from)
- static void fill(List<? super T> l, T value)
- static boolean addAll(Collection<? super T> c, T…values)
- static boolean replaceAll(List l, T oldValue, T newValue)
- static int indexOfSubList(List<?> l, List<?> s)
- static int lastIndexOfSubList(List<?> l, List<?> s)
- static void swap(List<?> l, int i, int j)
- static void reverse(List<?> l)
- static void rotate(List<?> l, int d)
- static int frequency(Collection<?> c, Object o)
- boolean disjoint(Collection<?> c1, Collection<?> c2)
批操作
集合与数组的转换
将数组转换为集合,可以使用Arrays.asList包装器。
String[] values = ...;
HashSet<String> staff = new HashSet<>(Arrays.asList(values));
toArray()方法返回的数组是Object数组,不能改变两类型。
编写自己的算法
遗留的集合
Hashtable类
与HashMap作用一样,与Vector类的方法一样,也是同步的。
枚举
属性映射
- 键与值都是字符串
- 表可以保存到一个文件,也可以从文件中加载
- 使用一个默认的辅助表
栈
Stack,扩展为Vector类
java.util.Stack
- E push(E item)
- E pop()
- E peek()
位集
BitSet
第十章 图形程序设计
Swing概述
抽象窗口工具箱AWT。Swing没有完全替代AWT,而是基于AWT架构。
创建框架
顶层窗口被称为框架。AWT库中有一个Frame类,用于描述顶层窗口。Swing版本为JFrame。
Swing类位于javax.swing包中。
所有Swing组件必须由事件分派线程进行配置。
EventQueue.invokeLater(()->
{
statements
});
框架定位
- setLocation和setBounds
- setIconImage
- setTitle
- setResizable
框架属性
确定合适的框架大小
Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
在组件中显示信息
处理2D图形
使用颜色
文本使用特殊字体
显示图像
第十一章 事件处理
事件处理基础
监听器对象是一个实现了特定监听器接口的类的实例。
事件源是一个能够注册监听器对象并发送事件对象的对象。
当事件发生时,事件源将事件对象传递给所有注册的监听器。
监听器对象将利用事件对象中的信息决定如何对事件做出相应。
ActionListener listener = ...;
JButton button = new JButton("OK");
button.addActionListener(listener);
实例:处理按钮点击事件
简洁地指定监听器
exitButton.addActionListener(event->System.exit(0));
实例:改变观感
适配器类
每个AWT监听器接口都配有一个适配器类。
动作
鼠标事件
AWT事件继承层次
语义事件和底层事件
语义事件是表示用户动作的事件。
底层事件是形成这些事件的事件。
第十二章 Swing用户界面组件
Swing和模型-视图-控制器设计模式
设计模式
模型-视图-控制器模式
实现三个独立的类:
- 模型:存储内容
- 视图:显示内容
- 控制器:处理用户输入
Swing按钮的模型-视图-控制器分析
布局管理概述
边框布局
BorderLayout
网格布局
GridLayout
文本输入
文本域
JTextField
标签和标签组件
JLabel
密码域
每个输入的字符都用回显字符表示。
JPasswordField
文本区
JTextArea
滚动窗格
JScrollPane
选择组件
复选框
接受的输入只是“是”或“非”。
JCheckBox
单选框
JRadioButton
边框
Border
组合框
多个选择项。可以编辑当前的选项内容。
JComboBox
滑动条
JSlider
菜单
菜单栏包含下拉菜单的名字,点击名字可以打开包含菜单项和子菜单的菜单。
菜单创建
创建菜单栏
JMenuBar menuBar = new JMenuBar();
将菜单栏添加到框架上
frame.setJMenuBar(menuBar);
为每个菜单建立一个菜单对象
JMenu editMenu = new JMenu("Edit");
将顶层菜单添加到菜单栏中
menuBar.add(editMenu);
向菜单对象中添加菜单项、分隔符和子菜单
JMenuItem = pasteItem = new JMenuItem("Paste");
editMenu.add(pasteItem);
editMenu.addSeparator();
JMenu optionMenu=...
editMenu.add(optionMenu);
菜单项中的图标
复选框和单选钮菜单项
JCheckBoxMenuItem
JRadioBoxMenuItem
弹出菜单
JPopupMenu
快捷键和加速器
启用和禁用菜单项
工具栏
快速访问常用命令的按钮栏。可以随处移动。
JToolBar
工具提示
复杂的布局管理
网格组布局
组布局
不使用布局管理器
定制布局管理器
遍历顺序
对话框
选项对话框
创建对话框
JDialog