/* Collections是Collection的工具类。 工具类中其中两个比较常用的方法就是: 1,sort(list) 、 sort(list,自定义比较器) 2,max(list) 、 max(list,自定义比较器) 3,binarySearch(list,key) //利用折半查找的方法找到list中key元素的索引,存在则返回索引,不存在则返回-(插入点)-1 */ import java.util.*; class CollectionsDemo { public static void main(String[] args) { sortDemo(); } public static void sortDemo() { List<String> list=new ArrayList<String>(); list.add("shdgjh"); list.add("Alklkjjj"); list.add("and"); list.add("hello"); list.add("World"); list.add("Hello"); list.add("hello"); //sop("原始list:"+list); //排序: Collections.sort(list);//根据元素的自然顺序 对指定列表按升序进行排序。 sop("按照自然顺序排序后的list:"+list); //Collections.sort(list,new MyComparator());// 根据指定比较器产生的顺序对指定列表进行排序。 //sop("按照字符串长度排序后的list:"+list); //获取最大值 //String max=Collections.max(list);//根据元素的自然顺序,返回给定 collection 的最大元素。 //sop("返回自然顺序最大的对象:"+max); //String max1=Collections.max(list,new MyComparator()); //sop("返回字符串长度最大的对象:"+max1); int num=Collections.binarySearch(list,"and");//使用二分查找找到某一元素的索引值并返回 sop("and的索引-调用binarySearch方法:"+num); int y=halfSearch(list,"and"); sop("and的索引-调用自定义的halfSearch方法:"+y); } public static void sop(Object obj) { System.out.println(obj); } public static int halfSearch(List<String> list,String key) { int min=0,max=list.size()-1; while(min<=max) { int mid=(min+max)>>1;//左乘右除 String str=list.get(mid); int x=str.compareTo(key); if(x>0) max=mid-1; else if(x<0) min=mid+1; else return mid; } return -min-1; } } class MyComparator implements Comparator<String> //指定比较器,按照字符串长度进行排序 { public int compare(String s1,String s2) { if(s1.length()>s2.length()) return 1; if(s1.length()<s2.length()) return -1; return s1.compareTo(s2); } }
/* Collection集合的工具类: Collections中的常用方法(续) 1, fill(list,"Hello");//用Hello来替换list中的所有对象。 2, replaceAll(list,old,new);//用new对象替换list中所有的old对象。 3, reverse(list);//list元素反转 */ import java.util.*; class CollectionsDemo1 { public static void main(String[] args) { fillDemo(); } public static void fillDemo() { List<String> list=new ArrayList<String>(); list.add("Hello1"); list.add("Hello2"); list.add("Hello3"); list.add("Hello4"); list.add("Hello5"); list.add("Hello6"); list.add("Hello3"); sop(list); Collections.shuffle(list); sop(list); Collections.swap(list,1,3); sop(list); //Collections.fill(list,"Hello World");//替换list中的全部对象 //list=fillDemo_1(1,4,list,"me");//替换指定索引起始和终点位置的对象。 Collections.replaceAll(list,"Hello3","me...");//替换list中所有的Hello3对象 sop(list); Collections.reverse(list);//反转 sop(list); } public static List<String> fillDemo_1(int first,int last,List<String> list,String key) { for(int i=first;i<last;i++) { list.set(i,key); } return list; } public static void sop(Object obj) { System.out.println(obj); } }
/* 工具类Collections中有一个反转方法,返回的是一个比较器。 reverseOrder() 返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 在本例中,TreeSet集合会对元素进行自然顺序的排序, 如果在构造函数中调用工具类中的该方法,则会强行逆转自然顺序。 Collections.reverseOreder();//对自然顺序进行反转。 Collections.reverseOreder(new MyComparator());//对自定义的比较器比较后的顺序进行反转。 */ import java.util.*; //代码实现工具集的reverseOrder()反转方法的原理:实际开发中不用写这部分代码。因为已经封装好了 class StrComparator implements Comparator<String> { public int compare(String s1,String s2) { return s2.compareTo(s1);//自然顺序的逆序。 //return s1.compareTo(s2);//自然顺序的正序。 /* 逆序解释: int num=s1.compareTo(s2); if(num>0) return -1; if(num<0) return 1; return num; */ } } class MyComparator implements Comparator<String> //指定比较器,按照字符串长度进行排序,从短到长 { public int compare(String s1,String s2) { if(s1.length()>s2.length()) return 1; if(s1.length()<s2.length()) return -1; return s1.compareTo(s2); } } class CollectionsDemo2 { public static void main(String[] args) { //TreeSet<String> ts=new TreeSet<String>(Collections.reverseOrder());//使用工具类中的反转方法(自然顺序) //TreeSet<String> ts=new TreeSet<String>(new StrComparator());//自然顺序反转原理实现 TreeSet<String> ts=new TreeSet<String>(Collections.reverseOrder(new MyComparator()));//对自定义的比较器比较后的顺序进行反转,这个真的好牛啊! ts.add("hello"); ts.add("kl"); ts.add("heyjk"); ts.add("ash"); ts.add("u"); ts.add("bght"); sop(ts); Iterator<String> it=ts.iterator(); while(it.hasNext()) { sop(it.next()); } } public static void sop(Object obj) { System.out.println(obj); } }