本帖最后由 彭飞 于 2014-5-27 08:35 编辑
问题就是 1、我模拟的Collections.fill() 原理是否正确,
2、后续扩展的【规律性替换】是否有意义。
今天在看毕老师就Collections 工具类的讲解
知道了 Collections.fill() 实现了替换集合中的所有元素的功能。
然后老师留了一个小练习,需求是替换集合中的部分元素。
然后我就开始先模拟Collections.fill() 方法的原理, 功能倒是实现了,总感觉似乎不对。
还请大家看看是不是正确的。
同时根据自己写的这个原理扩展出了,替换部分元素的功能,完成了小练习的功能
再最后又突发奇想的,能不能在替换的时候按照某种规律进行替换,
于是又有了 2个小功能,分别对int类型集合,string 类型集合进行了规律替换。
具体代码如下:
- import java.util.*;
- class CollectionsDemo3
- {
- public static void main(String[] args)
- {
- filldemo();
- kuoFill();//扩展部分
- }
- /**
- fill方法可以将list集合中的所有元素替换成指定元素
- 练习:将list集合中的部分元素替换成指定元素。
- */
- //Collections.fill(list,"pppppp");
- public static void filldemo(){
- sop("替换功能演示、原理、小练习");
- List<String> list = new ArrayList<String>();
- //新增元素。
- list.add("a");
- list.add("ag");
- list.add("dfd");
- list.add("ggggs");
- list.add("z");
- list.add("dd");
- sop("原集合 :"+list);
- Collections.fill(list,"YY");//Collections下fill工具进行替换
- sop("fill替换 :"+list);
- list=moniFill(list,"qq");//自定义模拟fill原理 替换
- sop("模拟替换 :"+list);
- list=onlyFill(list,2,4,"mm");// 练习题,基于fill原理进行扩展 替换
- sop("部分替换 :"+list);
- list=stringFill(list,"i");// 突发奇想的,进行了规律性替换
- sop("功能延伸 :"+list);
- }
- //模拟Fill 替换
- public static List<String> moniFill(List<String> list,String str){
- //创建一个新集合
- List<String> nlist =new ArrayList<String>();
- //使用迭代器获取原集合的长度(元素个数),通过遍历新增(相同个数/长度的 元素)被替换值。
- for(Iterator<String> it = list.iterator() ; it.hasNext() ; ){
- if(!it.next().equals(str))//每遍历一次,插入一个对应的替换值。
- nlist.add(str);
- }
- return nlist;
- }
- //基于模拟替换 延伸出部分替换
- public static List<String> onlyFill(List<String> list,int start,int end,String str){
- List<String> nlist =new ArrayList<String>();
- int num=0;
- for(Iterator<String> it = list.iterator() ; it.hasNext() ; ){
- if(num<start||num>end-1){//end-1 是为了符合Java包含头,不包含尾的特性。
- nlist.add(it.next());
- }else if(!it.next().equals(str)){//把每一个it.next() 都更改为str
- nlist.add(str);
- }
- num++;
- }
- return nlist;
- }
- //延伸 一个小小的延伸功能。让一个int类型的集合被替换为某种规律的集合。
- public static List<Integer> intFill(List<Integer> list,int str){
- List<Integer> lint =new ArrayList<Integer>();
- for(Iterator<Integer> it = list.iterator() ; it.hasNext() ; ){
- if(!it.next().equals(str))
- lint.add(str);
- str+=9;
- }
- return lint;
- }
- //对int类型的集合,进行规律性的替换
- public static void kuoFill(){
- sop("\n扩展部分,让一个int集合被替换为某种规律的集合");
- List<Integer> lint = new ArrayList<Integer>();
- lint.add(2);
- lint.add(99);
- lint.add(76);
- lint.add(76);
- lint.add(76);
- sop("原集合 :"+lint);
- lint=intFill(lint,5);// 按某种规律进行替换。
- sop("成规律替换 :"+lint);
- }
- //延伸 让一个String类型的集合被替换为某种规律的集合。
- public static List<String> stringFill(List<String> list,String str){
- List<String> nlist =new ArrayList<String>();
- for(Iterator<String> it = list.iterator() ; it.hasNext() ; ){
- if(!it.next().equals(str))
- nlist.add(str);
- str+=str+"O";
- }
- return nlist;
- }
- //打印语句
- public static void sop(Object obj){
- System.out.println(obj);
- }
- }
复制代码
|