实验三熟悉常用java工具包并运用编程实验目的:本实验旨在巩固同学们对上课所讲java.util工具包中Collection,List,Set,Map加深理解,对其用法编程有一个更加深入的理解,为同学们以后的能够用Java进行独立地编写桌面程序打下一定的基础。
实验内容:本实验的内容为:用Collection,List,Set,Map来存储数据,并进行排序,任何用Iterator,ListIterator或者Enumeration来打印其结果(按顺序和降序排列打印)。
共分为四部分部分(前三部分必做,如果选第四个,前三个可以不做。
):(1)按顺序把1,10,5,7,6,2,9,20,14,存入到List中(注:允许自己自定义任何数),并对其进行排序,打印其升序和降序排列的结果。
然后再向List中位置为第四位插入数35看看会有啥结果?再向List中插入字符串“ddy”,试猜想排序是否会出错?然后看看运行结果是啥?程序:import java.util.*;public class SY3{public SY3(){List list=new ArrayList();list.add(1);list.add(10);list.add(5);list.add(7);list.add(6);list.add(2);list.add(9);list.add(20);list.add(14);list.add(35);list.add("ddy");System.out.println("原序列:");for(int i=0;i<=list.size()-1;i++){System.out.println(list.get(i));}System.out.println("新序列");for(int i=0;i<=list.size()-1;i++){Collections.sort(list);Collections.reverse(list);System.out.println(list.get(i));}}public static void main(String[] args){new SY3();}}结果如图(2)按顺序把下面一组数([1,2] [3,4] [2,2] [6,4] [5,2] [4,4])存放到Map中(注:允许自己自定义任何数),并按key 和value的值进行排序。
如果再向Map中加入[3,6] 看看排序结果有啥变化?并说出其理由。
程序代码:package SY3;import java.util.*;public class Main{List li;Map m1;Enumeration em;Iterator<Map.Entry<Integer,Integer>> it;Iterator lit;Collections ce;Map.Entry<String,Integer> m4;List<Map.Entry<Integer,Integer>> lm;public Main(){li=new ArrayList();li.add(7);li.add(2);li.add(6);li.add(3);li.add(1);li.add(8);li.add(9);ce.sort(li);ce.reverse(li);lit=li.iterator();while(lit.hasNext()){System.out.println(lit.next());}m1=new HashMap();m1.put(1,2);m1.put(3,4);m1.put(2,2);m1.put(6,4);m1.put(5,2);m1.put(4,4);m1.put(3,6);lm=new ArrayList<Map.Entry<Integer,Integer>>(m1.entrySet());ce.sort(lm, new Comparator<Map.Entry<Integer,Integer>>(){public int compare(Map.Entry<Integer,Integer> o1,Map.Entry<Integer,Integer> o2) {return o1.getValue()-o2.getValue();}}it=lm.iterator();while(it.hasNext()){System.out.println(it.next().toString());}}public static void main(String[] args){// TODO code application logic herenew Main();}}运行结果:结果说明:先按括号中的第二个值升序进行排序,如果出现同值,则按子一个值升序排列(3)Map中的key值和value可不可以对不同类型的值或者对象同时混用进行排序?请对自己Map 编程进行修改并测试key和value排序结果是否会出错?(例如:字符串,双进度,Integer,Object,List,Set)。
程序代码package Sy3;import java.util.*;public class HashMapSort{public staticvoid main(String [] args){HashMap<String,Integer> hm = new HashMap<String,Integer>();hm.put("a",5);hm.put("c",7);hm.put("d",8);hm.put("v",0);hm.put("m",3);hm.put("u",10);hm.put("e",2);hm.put("g",6);Set<String> set = hm.keySet();//取出所有键TreeSet<String> ts =new TreeSet<String>(); System.out.println("键的原序:");for(String s:set){System.out.print(s+" ");ts.add(s);}System.out.println(" ");System.out.println("按键排序后的顺序:"); for(Strings:ts){ System.out.print(s+" "); }System.out.println(" ");Collection<Integer> cl= hm.values();//取出所有值TreeSet<Integer> ts1 =new TreeSet<Integer>(); System.out.println("值的原序:");for(Integer s:cl){System.out.print(s+" ");ts1.add(s);}System.out.println(" ");System.out.println("按值排序后的顺序:");for(Integers:ts1){ System.out.print(s+" "); }}}运行结果:实验步骤:创建一个java项目,命名为experiment3。
(如何创建项目参考《实验一》的项目创建方法。
)1、在Experiment3的项目下建立一个主类,自己命名。
构建类似如下的窗体。
实验帮助:1.对于前三部分实验:a)List排序可以用Collections.Sort() 和Collection.Reverse()方法。
打印可以用Enumeration 或者ListIterator等。
b)用import java.util. *; 导入全部工具类或者一个一个一个地导入。
c)Map中比较可以用Comparator,其参考代码如下List<Map.Entry<String,Integer>> list_data;list_data=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());Collections.sort(list_data, new Comparator<Map.Entry<String, Integer>>(){public int compare(Map.Entry<String, Integer> o1, Map.Entry<String,Integer> o2){return (o2.getValue() - o1.getValue());}});2.对于第四部分实验:(1)用map结合Comparator排序为好,结果可以存入到List中。
排序代码类似如下:List<Map.Entry<String,Integer>> list_data;list_data=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());Collections.sort(list_data, new Comparator<Map.Entry<String, Integer>>(){public int compare(Map.Entry<String, Integer> o1, Map.Entry<String,Integer> o2){return (o2.getValue() - o1.getValue());}});(2)对于贡献度和依存度排序也可以用Map,其中key值为C1,。
C7. value 为贡献度和依存度。
排序中要注意余数处理。
????例如:7个客户分为4个等级,不可能每个等级为1.75个客户。