java大作业1–电话簿
一、题目
Java程序设计实用教程p402 12-13
二、预览
三、题解
一.Friend类
首先明确这个电话簿存入的信息为一个个Friend,每一个Friend需要具有姓名,性别,电话号码,关系这几个属性。之后,写构造方法(我这里只写了一个),以及一系列的get方法。
package 电话簿;
//记住要写入对象文件的Friend类必须实现序列化接口
public class Friend implements java.io.Serializable{
private String name;
private String sex;
private String tel;
private String friendship;
public Friend(String name,String sex,String tel,String friendship)
{
this.name = name;
this.sex = sex;
this.tel = tel;
this.friendship = friendship;
}
public String getName()
{
return name;
}
public String getSex()
{
return sex;
}
public String getTel()
{
return tel;
}
public String getFriendship()
{
return friendship;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
二.Friends类
为了更为方便地管理从后台(文件)拿到的数据,我写了一个Friends类,它具有姓氏,HashMap map(以姓名作为键值,用于存储一系列相同姓氏不同名字的Friend),为该姓氏的Friend的数目这几个属性。之后,写构造方法(我也只写了一个),添加方法,删除方法,以及一系列get方法。
package 电话簿;
import java.util.HashMap;
//数据中转站
public class Friends implements java.io.Serializable{
private String family_name;// 姓氏
private HashMap<String, Friend> map;// 里面存放这一堆这个姓氏的人的数据
private int friends_num;// 该姓氏的人数
public Friends(String family_name)// 以姓作为本类的关键
{
this.family_name = family_name;
map = new HashMap<String, Friend>();
this.friends_num = 0;
}
public void add(Friend f)//添加方法
{
//System.out.println(f.getName());
if(!map.containsKey(f.getName()))//若Friends中不含有这这个姓名的Friend,则增加Friend数目
{
//System.out.println(1);
this.friends_num++;
}
this.map.put(f.getName(), f);
}
public int delete(String name)// 删除方法,对应前端的删除按钮
{
if(map.containsKey(name))
{
map.remove(name);
this.friends_num--;
return 1;//删除成功返回1给前端,由前端作出show区界面改变的反应
}
return 0;
}
public int get_friends_num() {
return friends_num;
}
public String get_family_name() {
return family_name;
}
public HashMap<String,Friend> get_map()
{
return map;
}
}
三.Home类
Home类写了对前端和后台的操作,代码主要集中在这个部分,其实按理来说我觉得不应该这样集中在这里的,但是懒地管那么多了。该类包含的属性众多,其中有一个用于存放从后台和前端读来的Friends的arraylist链表。
1.前端界面部分
(1)将初始化写在了init方法里了,包含了外框处理,姓氏列表,操作区域,分割设置,数据集初始化。
(2)maketable操作:由于涉及到众多更新前端表格的操作,所以单独将maketable方法写出,以便调用。maketable本质为对JTable的操作,关键在于放入其中的Object二维数组datas生成问题,datas不同使得表中的数据不同。而datas的生成主要靠前端用户输入后更新一次或者后台读入更新一次。
2.后台操作部分(涉及读写对象文件)
(1)操作主要放在相应事件actionPerformed中,有添加,删除,打开(文件),保存(文件),排序,查找,定时保存(线程)。然后几乎都要用到maketable。
(2)openFile操作:由于涉及多次相同的打开文件操作,所以将openfile方法单独写出,以便调用。主要为从文件中读出数据的操作,然后maketable。
(3)涉及到点击姓氏列表框会更新对应表格数据所以写了mousePressed方法,主要还是maketable。
package 电话簿;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
//文件的读入读出用对象字节流,读的是friends对象
public class Home extends JFrame implements ActionListener,MouseListener,Runnable{
JButton Add, Delete, Open, Save;// 四大按钮
JList<String> familyname_List;// 姓氏列表
DefaultListModel<String> family_names;
JScrollPane left_jsc;
JPanel right_Page, process_Page;
JTable show_Page;
JTextField name_Field, tel_Field, friendship_Field;// 姓名输入区域,电话输入区域,关系输入区域
JRadioButton m, w;// 男女单选栏
JCheckBox time_Save;// 定时保存单选栏
JComboBox<String> find_Key, order_Key;// 查找关键字,排序关键字设置栏
JComboBox<Integer> time_Setting;// 保存时间设置栏
Object[][] datas;// 存放得到的数据
JScrollPane show_jsc;
JSplitPane jsp1,jsp2;
ArrayList<Friends> arraylist;// 数据中转站,存放产生的friends对象
Friends friends;// 当前所处的姓氏区
int friends_num;//该姓氏区拥有的人数
JFileChooser fc;// 文件选择器
String filename;// 打开的文件名
Thread thread;
int timekey;//自动保存间隔时间
public Home() {
// 初始化界面
super("电话簿");
init();
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Home();
}
public void init() {
// 外框处理
this.setSize(900, 280);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// 姓氏列表
family_names = new DefaultListModel<String>();
familyname_List = new JList<String>(family_names);
familyname_List.addMouseListener(this);//注意,对象的监听器每new一次就得注册一回监听器
left_jsc = new JScrollPane(familyname_List);
// 操作区域
process_Page = new JPanel(new GridLayout(2, 1));
JLabel title = new JLabel(" Friend"); // 标题栏
JPanel input_Page = new JPanel(new FlowLayout()); // 输入栏
name_Field = new JTextField("姓名", 15);// 姓名输入框
m = new JRadioButton("男");// 性别选择栏
w = new JRadioButton("女");
m.addActionListener(this);
w.addActionListener(this);
ButtonGroup bg = new ButtonGroup();
bg.add(m);
bg.add(w);
tel_Field = new JTextField("电话号码", 17);// 电话号码输入框
friendship_Field = new JTextField("关系", 23);// 关系输入框
friendship_Field.setSize(187, 20);
input_Page.add(name_Field);
input_Page.add(m);
input_Page.add(w);
input_Page.add(tel_Field);
input_Page.add(friendship_Field);
JPanel deal_Page = new JPanel(new FlowLayout()); // 操作栏
JToolBar tb = new JToolBar();
Add = new JButton("添加");// 添加按钮
Add.addActionListener(this);
Delete = new JButton("删除");// 删除按钮
Delete.addActionListener(this);
JLabel lb1 = new JLabel("查找关键字");
find_Key = new JComboBox<String>();// 设置查找关键字设置栏
find_Key.addActionListener(this);
String[] findkeys = { "空值","姓名", "性别", "电话", "关系" };
for (int i = 0; i < 5; i++) {
find_Key.addItem(findkeys[i]);
}
JLabel lb2 = new JLabel("排序关键字");
order_Key = new JComboBox<String>();// 设置排序关键字设置栏
order_Key.addActionListener(this);
String[] orderkeys = { "空值","姓名" };
for (int i = 0; i < 2; i++) {
order_Key.addItem(orderkeys[i]);
}
Open = new JButton("打开");// 打开按钮
Open.addActionListener(this);
Save = new JButton("保存");// 保存按钮
Save.addActionListener(this);
time_Save = new JCheckBox("定时保存");
time_Save.addActionListener(this);
time_Setting = new JComboBox<Integer>();// 设置保存时间设置栏
time_Setting.addActionListener(this);
for (int i = 1; i <= 10; i++) {
time_Setting.addItem(i);
}
JLabel lb3 = new JLabel("分钟");
deal_Page.add(Add);
deal_Page.add(Delete);
deal_Page.add(lb1);
deal_Page.add(find_Key);
deal_Page.add(lb2);
deal_Page.add(order_Key);
deal_Page.add(Open);
deal_Page.add(Save);
deal_Page.add(time_Save);
deal_Page.add(time_Setting);
deal_Page.add(lb3);
// deal_Page.add(tb);
JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);// 小分割 //添加操作区域组件
jsp.setTopComponent(title);
jsp.setBottomComponent(input_Page);
process_Page.add(jsp);
process_Page.add(deal_Page);
// 分割设置
jsp1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);// 第一分割
jsp1.setDividerLocation(100);// 设置第一分割线位置
jsp1.setLeftComponent(left_jsc);// 设置第一分割左半边内容
right_Page = new JPanel();
jsp1.setRightComponent(right_Page);// 设置第一分割右半边内容
this.add(jsp1);// 添加第一分割
// 第二分割由maketable完成
//数据集初始化
// 显示区域--表格
datas = null;
makeTable(null);
// 初始化arraylist:这里主要是用于用户直接添加数据而未打开原有的文件;并初始化friends_num
arraylist = new ArrayList<Friends>();
friends_num = 0;
this.thread = new Thread(this);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == Add)// 添加,往姓氏列表,show区,中转站添加input区的数据
{
String name, sex, tel, friendship;
name = this.name_Field.getText();// 得到姓名
sex = "男";
if (m.isSelected())// 得到性别
{
sex = "男";
}
if (w.isSelected())
{
sex = "女";
}
tel = this.tel_Field.getText();// 得到电话
friendship = this.friendship_Field.getText();// 得到关系
// 添加数据到当前姓氏区对应的中转站
Friend f = new Friend(name, sex, tel, friendship);
// 判断一下输入的人的数据的姓是否已存在,若已存在则添加到对应的姓氏区,反之则创造一个新的姓氏区
int findindex = 0;
for (Friends F : arraylist) {
if (F.get_family_name().equals(f.getName().charAt(0) + "")) {
break;
}
findindex++;
}
if (findindex < this.friends_num)// 找到了
{
arraylist.get(findindex).add(f);
}
else {
arraylist.add(new Friends(f.getName().charAt(0) + ""));// 将数据添加到表尾
this.friends_num++;
// System.out.println(arraylist.get(this.friends_num-1).get_family_name());
arraylist.get(friends_num-1).add(f);
friends = arraylist.get(0);
}
// 添加数据到当前姓氏区的show区
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
Friend f0 = friends.get_map().get(key);
datas[i][0] = f0.getName();
datas[i][1] = f0.getSex();
datas[i][2] = f0.getTel();
datas[i][3] = f0.getFriendship();
i++;
}
makeTable(datas);
// 添加数据到姓氏列表
family_names = new DefaultListModel<String>();
family_names.addElement("全部");
for (Friends F : arraylist) {
family_names.addElement(F.get_family_name());
}
familyname_List = new JList<String>(family_names);
familyname_List.addMouseListener(this);
left_jsc = new JScrollPane(familyname_List);
jsp1.setDividerLocation(100);// 设置第一分割线位置
jsp1.setLeftComponent(left_jsc);// 设置第一分割左半边内容
}
if (e.getSource() == Delete)// 删除,将show区,中转站,后台中对应input区的数据删除
{
int j=0;
String keyname = this.name_Field.getText();
for(Friends F : arraylist)
{
if(F.delete(keyname)==1)
{
break;
}
j++;
}
// 添加数据到当前姓氏区的show区
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
Friend f0 = friends.get_map().get(key);
datas[i][0] = f0.getName();
datas[i][1] = f0.getSex();
datas[i][2] = f0.getTel();
datas[i][3] = f0.getFriendship();
i++;
}
makeTable(datas);
// 添加数据到姓氏列表
if(j<this.friends_num)
{
if(arraylist.get(j).get_friends_num()==0)
{
arraylist.remove(j);
family_names = new DefaultListModel<String>();
family_names.addElement("全部");
for (Friends F : arraylist) {
family_names.addElement(F.get_family_name());
}
familyname_List = new JList<String>(family_names);
familyname_List.addMouseListener(this);
left_jsc = new JScrollPane(familyname_List);
jsp1.setDividerLocation(100);// 设置第一分割线位置
jsp1.setLeftComponent(left_jsc);// 设置第一分割左半边内容
}
}
}
if (e.getSource() == Open)// 打开:打开文件,将文件中的数据读到由friends构成的arraylist中
{
// 文件操作
fc = new JFileChooser(new File("D:\\冬瓜的神秘空间1\\my PROGRAM(java)\\电话簿"));// 设置开始文件夹
FileNameExtensionFilter filter = new FileNameExtensionFilter("Java文件(*.java)", "txt");// 设置只出现的文件格式
fc.setFileFilter(filter);
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)// 选中文件后操作
{
File file = fc.getSelectedFile();
openFile(file);
}
}
if (e.getSource() == Save)// 保存
{
if (filename != null)// 若已打开了某文件,后台添加数据后保存
{
try {
OutputStream out = new FileOutputStream(filename);
ObjectOutputStream objout = new ObjectOutputStream(out);
for (Friends F : arraylist) {
objout.writeObject(F);
}
objout.close();
out.close();
} catch (IOException ex) {
}
} else// 反之,创建文件,将数据写入文件中并保存
{
int i;
String inputfilename = "我的电话簿";
fc = new JFileChooser(new File("D:\\冬瓜的神秘空间1\\my PROGRAM(java)\\电话簿"));// 设置开始文件夹
FileNameExtensionFilter filter = new FileNameExtensionFilter("Java文件(*.java)", "txt");// 设置只出现的文件格式
fc.setFileFilter(filter);
if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)// 创建一个文件,由用户输入文件名并保存
{
inputfilename = fc.getSelectedFile().toString();
for (i = inputfilename.length() - 1; i > 0; i--) {
if (inputfilename.charAt(i) == '\\') {
break;
}
}
inputfilename = inputfilename.substring(i + 1);
File file = new File("D:\\冬瓜的神秘空间1\\my PROGRAM(java)\\电话簿", inputfilename);
try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
OutputStream out = new FileOutputStream(file.toString());
ObjectOutputStream objout = new ObjectOutputStream(out);
for (Friends F : arraylist) {
objout.writeObject(F);
}
objout.close();
out.close();
} catch (IOException ex) {
}
openFile(file);
}
}
}
if(e.getSource() instanceof JComboBox)//得到事件源
{
// System.out.println(friends);
//进行查找操作的时候不要进行排序!!!
if(this.friends!=null)
{
String findkey = (String) find_Key.getSelectedItem();//这个方法用于返回用户选择的那个对象
// System.out.println(findkey);
if(findkey.equals("姓名"))//按input框输入的姓名查找
{
// System.out.println(1);
String keyname = this.name_Field.getText();
for(Friends F : arraylist)
{
if(F.get_map().containsKey(keyname))
{
datas = new Object[1][4];
datas[0][0] = F.get_map().get(keyname).getName();
datas[0][1] = F.get_map().get(keyname).getSex();
datas[0][2] = F.get_map().get(keyname).getTel();
datas[0][3] = F.get_map().get(keyname).getFriendship();
makeTable(datas);
break;
}
}
}
if(findkey.equals("性别"))//按input框输入的性别查找
{
String keysex="男";
if (m.isSelected())// 得到性别
{
keysex = "男";
}
if (w.isSelected())
{
keysex = "女";
}
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
if(friends.get_map().get(key).getSex()==keysex)
{
Friend f0 = friends.get_map().get(key);
datas[i][0] = f0.getName();
datas[i][1] = f0.getSex();
datas[i][2] = f0.getTel();
datas[i][3] = f0.getFriendship();
i++;
}
}
makeTable(datas);
}
if(findkey.equals("电话"))//按input框输入的电话查找
{
int sum=0;
String keytel = this.tel_Field.getText();
for(Friends F : arraylist)
{
for (String key : F.get_map().keySet()) {
if(F.get_map().get(key).getTel().equals(keytel))
{
sum++;
}
}
}
datas = new Object[sum][4];
int i = 0;
int flag = 0;
for(Friends F : arraylist)
{
for (String key : F.get_map().keySet()) {
if(F.get_map().get(key).getTel().equals(keytel))
{
Friend f0 = F.get_map().get(key);
datas[i][0] = f0.getName();
datas[i][1] = f0.getSex();
datas[i][2] = f0.getTel();
datas[i][3] = f0.getFriendship();
i++;
}
if(i>=sum)
{
flag=1;
break;
}
}
if(flag==1)
{
break;
}
}
makeTable(datas);
}
if(findkey.equals("关系"))//按input框输入的关系查找
{
String keyfriendship = this.friendship_Field.getText();
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
if(friends.get_map().get(key).getFriendship().contains(keyfriendship))
{
Friend f0 = friends.get_map().get(key);
datas[i][0] = f0.getName();
datas[i][1] = f0.getSex();
datas[i][2] = f0.getTel();
datas[i][3] = f0.getFriendship();
i++;
}
}
makeTable(datas);
}
String orderKey = (String) order_Key.getSelectedItem();
if(orderKey=="姓名")//以姓名做关键之按字典序罗列
{
Friend[] f = new Friend[100];
int i=0;
for (String key : friends.get_map().keySet()) {
f[i]=friends.get_map().get(key);
// System.out.println("1"+f[i]);
i++;
}
MyComparator cmp = new MyComparator();
Arrays.sort(f,0,i,cmp);
datas = new Object[friends.get_friends_num()][4];
for(i=0;i<friends.get_friends_num();i++)
{
datas[i][0] = f[i].getName();
datas[i][1] = f[i].getSex();
datas[i][2] = f[i].getTel();
datas[i][3] = f[i].getFriendship();
}
makeTable(datas);
}
}
}
//自动保存
if(e.getSource() instanceof JCheckBox)
{
if(e.getActionCommand().equals("定时保存"))
{
timekey = (Integer) time_Setting.getSelectedItem();
System.out.println(timekey);
if(this.thread.getState()!=Thread.State.NEW)
{
this.thread = new Thread(this);
}
this.thread.start();
}
else
{
this.thread.interrupt();
}
}
}
public void makeTable(Object[][] datas)// 生成表格
{
if (datas != null) {
//System.out.println(datas[0][0]);
String[] titles = { "姓名", "性别", "电话号码", "关系" };// 创建表格中的横标题
show_Page = new JTable(datas, titles);// 创建初始表格
show_Page.setPreferredScrollableViewportSize(new Dimension(750, 70));// 设置表格属性
show_jsc = new JScrollPane(show_Page);
// 注意,这里不能再new一个jsp2了,要用原来的,不然会一直往下加分割!!!
jsp2.setTopComponent(show_jsc);// 设置第二分割上半边内容
jsp2.setDividerLocation(100);// 设置第二分割位置
jsp2.setBottomComponent(process_Page);// 设置第二分割下半边内容
} else {
datas = new Object[0][4];
String[] titles = { "姓名", "性别", "电话号码", "关系" };// 创建表格中的横标题
show_Page = new JTable(datas, titles);// 创建初始表格
show_Page.setPreferredScrollableViewportSize(new Dimension(750, 70));// 设置表格属性
show_jsc = new JScrollPane(show_Page);
jsp2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);// 第二分割
jsp2.setTopComponent(show_jsc);// 设置第二分割上半边内容
jsp2.setDividerLocation(100);// 设置第二分割位置
jsp2.setBottomComponent(process_Page);// 设置第二分割下半边内容
right_Page.add(jsp2);// 添加分割
}
}
public void openFile(File file) {
filename = file.toString();
arraylist = new ArrayList<Friends>();// 初始化arraylist
// 从文件中读取数据
try {
InputStream in = new FileInputStream(filename);
ObjectInputStream objin = new ObjectInputStream(in);
while (true) {
System.out.println(1);
try {
arraylist.add((Friends) objin.readObject());
this.friends_num++;
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (EOFException eof) {
break;
}
}
in.close();
objin.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 将arraylist[0]数据写入show区与姓氏列表
// 姓氏列表
family_names = new DefaultListModel<String>();
family_names.addElement("全部");
for (Friends F : arraylist) {
family_names.addElement(F.get_family_name());
// System.out.println(1);
}
familyname_List = new JList<String>(family_names);
familyname_List.addMouseListener(this);
left_jsc = new JScrollPane(familyname_List);
jsp1.setDividerLocation(100);// 设置第一分割线位置
jsp1.setLeftComponent(left_jsc);// 设置第一分割左半边内容
// show区
// System.out.println(arraylist.size());
friends = arraylist.get(0);
// System.out.println(friends);
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
Friend f = friends.get_map().get(key);
datas[i][0] = f.getName();
datas[i][1] = f.getSex();
datas[i][2] = f.getTel();
datas[i][3] = f.getFriendship();
i++;
}
makeTable(datas);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
//列表框相应事件
int key0 = this.familyname_List.getSelectedIndex();
// System.out.println(1);
if(key0==0)//选择全部
{
int sum=0;
for(Friends F : arraylist)
{
sum+=F.get_friends_num();
}
datas = new Object[sum][4];
int i=0;
for(Friends F : arraylist)
{
for (String key : F.get_map().keySet()) {
Friend f = F.get_map().get(key);
datas[i][0] = f.getName();
datas[i][1] = f.getSex();
datas[i][2] = f.getTel();
datas[i][3] = f.getFriendship();
i++;
}
}
makeTable(datas);
}
else//选择某个姓氏
{
friends = arraylist.get(key0-1);
datas = new Object[friends.get_friends_num()][4];
int i = 0;
for (String key : friends.get_map().keySet()) {
Friend f = friends.get_map().get(key);
datas[i][0] = f.getName();
datas[i][1] = f.getSex();
datas[i][2] = f.getTel();
datas[i][3] = f.getFriendship();
i++;
}
makeTable(datas);
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(2);
if (filename != null)// 若已打开了某文件,后台添加数据后保存
{
while(true)
{
try
{
try {
OutputStream out = new FileOutputStream(filename);
ObjectOutputStream objout = new ObjectOutputStream(out);
for (Friends F : arraylist) {
objout.writeObject(F);
}
objout.close();
out.close();
} catch (IOException ex) {
}
Thread.sleep(this.timekey*1000*60);//从1ms开始换算
}
catch(InterruptedException ex)
{
break;
}
}
}
}
}
四.MyComparator类
用于比较Friend的比较器,按需,所以只写了按名字比较(用于实现字典序排序)
package 电话簿;
import java.util.Comparator;
//用于比较Friend的比较器类
public class MyComparator implements Comparator<Friend>{
@Override
public int compare(Friend f1, Friend f2) {
// TODO Auto-generated method stub
// System.out.println(f1);
return f1.getName().compareTo(f2.getName());
}
}