java collections使用_java之17天 Collections的使用 (一)

Collections:集合框架工具类

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 list=new ArrayList();

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 list,String key,Comparator 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 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 list=new ArrayList();

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 list=new ArrayList();

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 list=new ArrayList();

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 list=new ArrayList();

}

public static void sop(Object obj){

System.out.println(obj);

}

}

//字符串的长度来排序

class StrLenComparator implements Comparator{

@Override

public int compare(String o1, String o2) {

if(o1.length()>o2.length())

return 1;

if(o1.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{

public int compare(String s1,String s2){

return s2.compareTo(s1);

}

}

//字符串的长度来排序

class StrLenComparator1 implements Comparator{

@Override

public int compare(String o1, String o2) {

if(o1.length()>o2.length())

return 1;

if(o1.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 ts=new TreeSet();

ts.add("hdsdf");

ts.add("aaa");

ts.add("kk");

ts.add("cc");

sop(ts);//[aaa, cc, hdsdf, kk]

//为了将上面的集合反转

//方法1.自定义一个比较器 然后 改变 比较顺序

TreeSet ts1=new TreeSet(new StrCompartator());

ts1.add("hdsdf");

ts1.add("aaa");

ts1.add("kk");

ts1.add("cc");

sop(ts1);//[kk, hdsdf, cc, aaa]

//方法2.使用 Collectins.reverseOrder();获取与当前元素比较器的 " 逆向比较器"

TreeSet ts2=new TreeSet(Collections.reverseOrder());

ts2.add("hdsdf");

ts2.add("aaa");

ts2.add("kk");

ts2.add("cc");

sop(ts2);//[kk, hdsdf, cc, aaa]

//练习1.将字符串按长度正向排序

TreeSet ts3=new TreeSet(new StrLenComparator1());

ts3.add("hdsdf");

ts3.add("aaaf");

ts3.add("kk3");

ts3.add("cc");

sop(ts3);//[cc, kk3, aaaf, hdsdf]

//练习1.将字符串按长度逆向排序

TreeSet ts4=new TreeSet(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 list=new ArrayList();

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 list=new ArrayList();

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 list=new ArrayList();

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值