22.9 九宫格的解决方案,存在线型表中,为一个9×9的网格。
public class Test_22_1 { //创建俩个散列规则集,求它们的并集,差集和交集。 public static void main(String[] args) { HashSet<String> hs=new HashSet<String>(); hs.add("George"); hs.add("Jim"); hs.add("Blake"); hs.add("Kevin"); hs.add("Mecheal"); hs.add("John"); HashSet<String> hs2=new HashSet<String>(); hs2.add("George"); hs2.add("Kate"); hs2.add("Kevin"); hs2.add("Mecheal"); hs2.add("Ryan"); //hs.addAll(hs2); 并集 //hs.removeAll(hs2); //差集 //hs.retainAll(hs2); 交集 System.out.println(hs); } }
public class Test_22_2 { private static String source; static { source = "You Know I still Love You Baby And it will never change I want nobody nobody But You I want nobody nobody But You"; } /** 从文本读取单词,将所有不重复的单词按升(降)序显示,文本文件作为命令参数传递。 */ public static void main(String[] args) { String[] ints = source.split("[ \n\t\r.,;:!?(){]"); // 如果是升序输出,那么不需要自定义比较器了 TreeMap<String, Integer> map = new TreeMap<String, Integer>( new ABCComparator()); for (int i = 0; i < ints.length; i++) { String key = ints[i].toLowerCase(); if (key != null) { if (map.get(key) == null) { map.put(key, 1); } else { int value = map.get(key); map.put(key, value + 1); } } } System.out.println(map); } } class ABCComparator implements Comparator<String> { // 需要逆序 ,不是升序 public int compare(String o1, String o2) { return o2.compareTo(o1); } }
public class Test_22_3 { private static String source; private static HashMap<String, String> map = new HashMap<String, String>(); static { source = "abstract,assert,boolean,break,byte,case,catch,char,class,const,continue," + "default,do,double,else,enum,extends,final,finally,float,for,goto,if," + "implements,import,instanceof,int,interface,long,native,new,package," + "private,protected,public,return,strictfp,short,static,super,switch," + "synchronized,this,throw,throws,transient,try,void,volatile,while"; String[] result = source.split(","); for (int i = 0; i < result.length; i++) { String key = result[i]; map.put(key, key); } } public static int getKeyWords(String path) throws Exception { StringBuffer sb = new StringBuffer(); int result = 0; InputStream is = new FileInputStream(new File(path)); byte[] bs = new byte[1024]; int len; while ((len = is.read(bs, 0, bs.length)) != -1) { sb.append(new String(bs, 0, bs.length)); } is.close(); String[] data = sb.toString().split("[^a-zA-Z]"); for (int i = 0; i < data.length; i++) { if (data[i] != null && !data[i].equals("")) { System.out.println(data[i]); if (map.containsKey(data[i])) { result++; } } } return result; } // 读取一个java源文件,报告关键字的个数,命令行传递文件名。 /** * 思路:使用图,将文本文件转为字符串数组,然后遍历,将关键字放进一个HashMap中 因为基于hash表,所以查找速度很快 * 因为如果对问题设计了足够好的hash算法,保证碰撞率很低,hash_map的查找效率无可置疑。 * 在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。 */ public static void main(String[] args) { String path = "L:\\DBhelper.java"; int re; try { re = getKeyWords(path); System.out.println(re); } catch (Exception e) { e.printStackTrace(); } } }
public class Test_22_4 { //创建俩个数组线性表,求它们的并集,差集和交集。 public static void main(String[] args) { String[] s1=new String[]{"George","Jim","Blake","Kevin","Mecheal","John"}; String[] s2=new String[]{"George","Kate","Kevin","Mecheal","Ryan"}; List<String> list1=Arrays.asList(s1); List<String> list2=Arrays.asList(s2); Set<String> set1=new HashSet<String>(list1); Set<String> set2=new HashSet<String>(list2); // set1.addAll(set2); //并集 // set1.removeAll(set2); //差集 set1.retainAll(set2); //交集 list1=Arrays.asList(set1.toString()); System.out.println(set1); } }
public class Test_22_5 { //从文本文件读取单词,按照字母的升序显示所有的单词,可以重复,文本文件作为参数传递。 /** * 思路:读取文本转化为字符串数组,然后添加进入List集合中,然后排序 */ public static void main(String[] args) { String path="L:\\DBhelper.java"; StringBuffer sb = new StringBuffer(); InputStream is; List<String> list=new ArrayList<String>(); try { is = new FileInputStream(new File(path)); byte[] bs = new byte[1024]; int len; while ((len = is.read(bs, 0, bs.length)) != -1) { sb.append(new String(bs, 0, bs.length)); } is.close(); String[] data = sb.toString().split("[^a-zA-Z]"); for (int i = 0; i < data.length; i++) { if (data[i] != null && !data[i].equals("")) { list.add(data[i]); } } System.out.println(list); Collections.sort(list); System.out.println(list); } catch (Exception e) { e.printStackTrace(); } } }
public class Test_22_6 { //需求:读取个数不定的整数,输入0结束,打印频率最高的,如果有多个一样的最高频率则都输出。 /* * 思路:线性表适合插入和删除,不适合查找,这个程序需要找出频率最高的,还是使用HashMap比较好 */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); HashMap<String,Integer> map=new HashMap<String, Integer>(); String number=sc.nextLine(); while(!number.equals("0")){ if(map.get(number)==null){ map.put(number, 1); }else{ int value=map.get(number); map.put(number, value+1); } number=sc.nextLine(); } System.out.println(map); int max=0; String mark=new String(""); for(Map.Entry<String, Integer> m:map.entrySet()){ if(m.getValue()>max){ max=m.getValue(); mark=""; mark+=m.getKey(); }else if(m.getValue()==max){ mark+=","+m.getKey(); } } System.out.println(mark); } }
Test_22_7还在思考
public class Test_22_8 { public static void main(String[] args) { Random random=new Random(); List<Point> list=new ArrayList<Point>(); for (int i = 0; i < 100; i++) { int x=random.nextInt(1000)+1; int y=random.nextInt(1000)+1; list.add(new Point(x,y)); } System.out.println("before sort:"+list.toString()); Collections.sort(list); //我的错误就是在这里没有运行俩次,这是是针对y排序 Collections.sort(list,new CompareY()); //直接这样加是不会运行compareTo()方法的。这是针对x排序 System.out.println("after sort:"+list.toString()); } } class CompareY implements Comparator<Point> { public int compare(Point o1, Point o2) { System.out.println("compareY"); if (o1.x > o2.x) return 1; if (o1.x < o2.x) return -1; return 0; } } class Point implements Comparable<Point> { int x; int y; public Point(int x,int y){ this.x=x; this.y=y; } @Override public String toString() { return "[x="+x+",y="+y+"]"; } public int compareTo(Point other) { System.out.println("compareTo"); if (other.y > this.y) return -1; if (other.y < this.y) return 1; return 0; } }
Test_22_9网上找的资料,下一篇再研究
2015年6月5日19:46:01
我是菜鸟,我在路上。