- 浏览: 1592348 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
Collections:集合框架工具类
Collections.sort();
Collections.max();
Collections.binarySerach() 的使用 以及 原理
Collections.fill()
Collections.replaceAll()
Collections.reverse()
Collections.reverseOrder()
Collections.sort();
Collections.max();
Collections.binarySerach() 的使用 以及 原理
package com.itheima.day17; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * 集合框架工具类 * Collections * * 需求: * 可排序 和 可放入重复元素 (这样就不能使用TreeSet TreeMap 了因为不允许保存重复元素) * */ public class CollectionsDemo { public static void main(String[] args) { System.out.println("字符自然排序"); method(); System.out.println("====长度排序========"); method1(); System.out.println("=======max=========="); maxDemo(); System.out.println("=======binarySerach============="); binarySearch(); } //binarySerach 对于 有排序后的list public static void binarySearch(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); list.add("z"); list.add("zz"); Collections.sort(list); //使用 sort先排序 然后才能使用binarySearch(binarySearch 中的集合必须是有序的) sop(list); //[aaa, abcd, kkkk, qq, z, z, zz] sop(Collections.binarySearch(list, "asdfsdfsda")); //-3: 首先插入: [aaa, abcd, asdfsdfsda,kkkk, qq, z, z, zz] 由于没有找到 所以返回 -2-1 =-3 :其中 -2: 表示插入点 sop(Collections.binarySearch(list, "kafd")); //-3 sop(Collections.binarySearch(list, "ks")); // -4 // 应该可以看到 上面为什么 为 -3 -4了 //使用自定义的binarySearch 对于那些默认有比较性的对象排序了的集合 sop(halfSerach(list, "ks")); System.out.println("====默认没有比较性或者 不是所需的比较性的集合============"); //使用自定的binarySerach2 对于那些默认没有比较性 或者 不是我们所需的比较性的时候 比如: 字符串的长度排序来查找 Collections.sort(list,new StrLenComparator()); sop("字符长度排序:"+list); //字符长度排序:[z, z, qq, zz, aaa, abcd, kkkk] sop(halfSearch(list,"aaa",new StrLenComparator())); //返回排序后的匹配到的索引 sop(halfSearch(list,"ks",new StrLenComparator()));// 字符长度排序:[z, z, qq,('ks'插入的位置) zz, aaa, abcd, kkkk]==> -2-1 ==>-3 } //binarySerach 对于没有比较性的对象,或者 比较的方式 不是需要的比较方式 public static int halfSearch(List<String> list,String key,Comparator<String> comp){ int max,min,mid; max=list.size()-1; min=0; while(min<=max){ mid=(max+min)>>1; String str=list.get(mid); int num=comp.compare(str, key); if(num>0) max=mid-1; else if(num<0) min=mid+1; else return mid; } return -min-1; } //binarySerach 的原理 折半查找 , list也必须是排序的 public static int halfSerach(List<String> list,String key){ int max,min,mid; max=list.size()-1; min=0; while(min<=max){ mid=(max+min)>>1; String str=list.get(mid); int num=str.compareTo(key); if(num>0){ max=mid-1; }else if(num<0){ min=mid+1; }else return mid; } return -min-1; } //获取集合中最大值 public static void maxDemo(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); list.add("z"); list.add("zz"); Collections.sort(list); sop("排序:"+list); sop("最大:"+Collections.max(list)); sop("排序:"+list); sop("长度最大:"+Collections.max(list,new StrLenComparator())); } //需求改变: 要使用字符串的长度进行排序 // 这样就不能使用 字符串默认的 CompareTo 方法了,使用自定义比较器 public static void method1(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); list.add("z"); sop(list); Collections.sort(list,new StrLenComparator()); sop(list); } //需求: 对字符串进排序 sort 和 swap public static void method(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); sop(list); //Collections.sort(list); //将角标1 和 2 的值互换下 Collections.swap(list, 1, 2); sop(list); } //shuffle 随机排放集合中的元素 扑克牌 和 骰子 洗牌 public static void method_shuff(){ List<String> list=new ArrayList<String>(); } public static void sop(Object obj){ System.out.println(obj); } } //字符串的长度来排序 class StrLenComparator implements Comparator<String>{ @Override public int compare(String o1, String o2) { if(o1.length()>o2.length()) return 1; if(o1.length()<o2.length()) return -1; return o1.compareTo(o2); } }
Collections.fill()
Collections.replaceAll()
Collections.reverse()
Collections.reverseOrder()
package com.itheima.day17; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.TreeSet; /** * Collections的常用方法演示 * * fill(List<? super T> list, T obj) 将集合中的所有元素 替换制定的元素 * * 练习 .fill方法可以替换list集合中给所有元素替换成制定元素 * 将list集合中部分元素替换成制定元素 */ class StrCompartator implements Comparator<String>{ public int compare(String s1,String s2){ return s2.compareTo(s1); } } //字符串的长度来排序 class StrLenComparator1 implements Comparator<String>{ @Override public int compare(String o1, String o2) { if(o1.length()>o2.length()) return 1; if(o1.length()<o2.length()) return -1; return o1.compareTo(o2); } } public class CollectionsDemo1 { public static void main(String[] args) { System.out.println("=====fill========"); fillDemo(); System.out.println("=====fillPart========"); method(); System.out.println("======replaceAll and Reverse========"); replaceAll(); System.out.println("======ReverseOrder========"); orderDemo(); } //reverseOrder() 返回一个 逆向的比较器 //需求 将 字符串默认 排序方式 反转排序 public static void orderDemo(){ TreeSet<String> ts=new TreeSet<String>(); ts.add("hdsdf"); ts.add("aaa"); ts.add("kk"); ts.add("cc"); sop(ts);//[aaa, cc, hdsdf, kk] //为了将上面的集合反转 //方法1.自定义一个比较器 然后 改变 比较顺序 TreeSet<String> ts1=new TreeSet<String>(new StrCompartator()); ts1.add("hdsdf"); ts1.add("aaa"); ts1.add("kk"); ts1.add("cc"); sop(ts1);//[kk, hdsdf, cc, aaa] //方法2.使用 Collectins.reverseOrder();获取与当前元素比较器的 " 逆向比较器" TreeSet<String> ts2=new TreeSet<String>(Collections.reverseOrder()); ts2.add("hdsdf"); ts2.add("aaa"); ts2.add("kk"); ts2.add("cc"); sop(ts2);//[kk, hdsdf, cc, aaa] //练习1.将字符串按长度正向排序 TreeSet<String> ts3=new TreeSet<String>(new StrLenComparator1()); ts3.add("hdsdf"); ts3.add("aaaf"); ts3.add("kk3"); ts3.add("cc"); sop(ts3);//[cc, kk3, aaaf, hdsdf] //练习1.将字符串按长度逆向排序 TreeSet<String> ts4=new TreeSet<String>(Collections.reverseOrder(new StrLenComparator1())); ts4.add("hdsdf"); ts4.add("aaaf"); ts4.add("kk3"); ts4.add("cc"); sop(ts4);//[hdsdf, aaaf, kk3, cc] } //使用 replaceAll And Reverse public static void replaceAll(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); sop("原集合:"+list); Collections.replaceAll(list, "aaa", "cccc"); sop("目标集合:"+list); Collections.reverse(list); sop("反转集合:"+list); } public static void method(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); sop("原集合:"+list); fileDemoPart(list,2,4,"pp"); sop("目标集合:"+list); } //替换集合中部分元素 public static void fileDemoPart(List list,int start,int end,Object dest){ List partList=list.subList(start, end); Collections.fill(partList, dest); } //替换集合中所有的元素 成制定的元素 public static void fillDemo(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkk"); list.add("qq"); sop(list); Collections.fill(list, "pp"); sop(list); } public static void sop(Object obj){ System.out.println(obj); } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 1007public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2285经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5663package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 1007import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1057/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1014//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1828更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1420import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 820import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2401import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 927// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1176import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 806import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1150import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3897import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 970/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1027import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1843Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1011/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2234package out; import ja ...
相关推荐
《21天学通Java》是一本专门为初学者设计的Java编程教材,旨在帮助读者在21天的学习周期内快速掌握Java编程基础。这不仅涵盖了Java语言的核心概念,还注重实践,让学习者通过实际操作加深理解。在这个过程中,读者将...
28. **获取当月最后一天**:使用`Calendar`或`LocalDate`类。 29. **格式化日期**:使用`SimpleDateFormat`或`DateTimeFormatter`类。 30. **编码转换**:使用`new String(byteArray, charsetName)`方法。 31. **...
27. 如何获取某个日期是当月的最后一天? 可以使用Calendar类或者LocalDate类结合withDayOfMonth方法来获取。 28. 如何格式化日期? 可以使用SimpleDateFormat类或者java.time包下的DateTimeFormatter类来格式化...
30. **如何获取某个日期是当月的最后一天?** - 使用`Calendar`类计算月份的最大天数。 31. **如何格式化日期?** - 使用`SimpleDateFormat`类。 32. **编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1...
可以使用 `java.time` 包下的 `MonthDay` 类或者 `Calendar` 类来判断某一天是否为当月的最后一天。 **29. 如何格式化日期?** 可以使用 `SimpleDateFormat` 类或者 `DateTimeFormatter` 类来格式化日期。 **30. ...
18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...
要实现Comparable接口,或者在使用Collections.sort()时提供一个Comparator对象。 14. 如何将数值型字符转换为数字? 使用Integer.valueOf()或Double.valueOf()方法将字符串转换为数字。 15. 如何将数字转换为...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 ...
实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector 397 实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程...
根据提供的文档内容,我们可以归纳总结出一系列重要的Java知识点,这些知识点不仅对于准备Java面试非常有用,也是Java开发者必备的基础知识。接下来,我们将按照文档中提到的主题进行详细解释。 ### Java面向对象 ...
18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...
实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector 397 实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) ...
如何获取某个日期是当月的最后一天? 使用`Month`类的`length`方法结合`LocalDate`类的`plusMonths`和`minusDays`方法。 #### 29. 如何格式化日期? 使用`SimpleDateFormat`或`DateTimeFormatter`类。 #### 30....
实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector 397 实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 ...
如何获取某个日期是当月的最后一天? 使用`MonthDay`类或`Calendar`类的`getActualMaximum(Calendar.DAY_OF_MONTH)`方法。 #### 29. 如何格式化日期? 使用`SimpleDateFormat`或`DateTimeFormatter`类格式化日期...
18. **日期和时间处理**:Java的`java.util.Calendar`和`java.time`包提供了处理日期和时间的方法,可以用来获取前一天的当前时刻。 19. **文件读写与计数器**:Java的`FileInputStream`、`FileOutputStream`等类...
- 使用`java.time`包中的类,如`LocalDate`和`LocalDateTime`,获取前一天的日期和时间。 18. **文件读写计数器** - 可以使用`FileInputStream`或`BufferedReader`读取文件,`FileOutputStream`或`PrintWriter`...
18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...
实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector 397 实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程...
- **垃圾回收机制**:自动管理内存的一种机制,Java虚拟机会定期清理不再使用的对象占用的内存空间,以防止内存泄漏。 #### 5. 在JAVA中,如何跳出当前的多重嵌套循环? 可以使用标签化的break语句,即在最外层...