package newFeatures8;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/* Collections.fill(List<? super T> list,T obj)方法
* public static <T> void fill(List<? super T> list,T obj)
使用指定元素替换指定列表中的所有元素。
*/
/* Collections.replaceAll(List<T> list, T oldVal,T newVal)
* public static <T> boolean replaceAll(List<T> list, T oldVal,T newVal)
* 使用另一个值替换列表中出现的所有某一指定值。更确切地讲,使用 newVal
* 替换 list 中满足 (oldVal==null ? e==null : oldVal.equals(e)) 的每个 e 元素。(此方法对列表的大小没有任何影响。)
*/
public class CollectionsDemo {
public static void main(String[] args) {
fillDemo();
}
/**
* @author ljh
* @param nothing
* @return void
* @since 1.2
* @description 该Collections.fill()方法有局限性,只能替换指定list中的全部元素
* 如果我想要替换list中的部分元素,我任然要使用fill()该怎么办呢?
* 可以这么做使用list集合中的list.subList(fromIndex, toIndex)获取到子集合
* 然后再使用fill()方法,subList也有局限,就是元素要连续,要是不连续以下3个方法可以组合使用
* @see Collections.replaceAll(list, oldVal, newVal)
* @see List.set(index, element)//一般和for循环一起使用
* @see List.subList(fromIndex, toIndex)
*/
public static void fillDemo(){
List<String> list=new ArrayList<>();
list.add("abcd");//String类本身就是实现了Comparable接口
list.add("kkkkk");
list.add("z");
list.add("zz1");
list.add("zz");
list.add("qq1");
list.add("qq1");
list.add("qq2");
list.sort(null);//Collections.sort(list);
System.out.println("原集合是:"+list);
List<String> subList=list.subList(1, 5);//角标如果越界则抛异常
System.out.println("子集合是:"+subList);
Collections.fill(subList,"tt");
System.out.println("替换后的子集合是:"+subList);
}
/**
* @author ljh
* @param nothing
* @return void
* @since 1.2
* @description 替换满足条件的每个list元素
*
* @CoreSourceCode
* <p>replaceAll()的核心源代码是:
* <pre>
* {@code
* for (int i=0; i<size; i++) {
if (oldVal.equals(list.get(i))) {
list.set(i, newVal);
result = true;
}
}
* }</pre>
*
* @see List.set(index, element)//一般和for循环一起使用
*
*/
public static void replaceAllDemo(){
List<String> list=new ArrayList<>();
list.add("abcd");//String类本身就是实现了Comparable接口
list.add("kkkkk");
list.add("qq1");
list.add("z");
list.add("zz1");
list.add("zz");
list.add("qq1");
list.add("qq1");
list.add("qq2");
list.sort(null);//Collections.sort(list);
System.out.println("原集合是:"+list);
Collections.replaceAll(list, "qq1", "tt");
System.out.println("替换后的集合是:"+list);
}
}