/*
集合框架的工具类:
Collections:
*/
import java.util.*;
class CollectionsDemo
{
public static void main(String[] args)
{
//sortDemo();
//maxDemo();
binarySearchDemo();
}
public static void binarySearchDemo()//折半查找,必须是有序集合
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list);//按照自然顺序排序
sop(list);//打印
// int index = Collections.binarySearch(list,"aaa");//折半查找
// sop("index="+index);
int index = halfSearch(list,"aaaa");
sop("index="+index);
}
public static int halfSearch(List<String> list,String key)//折半查找原理
{
int max, min, mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;//右移,即除以2
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 int halfSearch2(List<String> list,String key,Comparator<String>)//折半查找,当添加的元素不具备比较性,自定义比较器原理
{
int max, min, mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;//右移,即除以2
String str = list.get(mid);
int num = cmp.compare(str,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("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list);//按照自然顺序排序
sop(list);//打印
//String max = Collections.max(list);//取出最大元素
//sop("max= "+max);
String max = Collections.max(list,new StrLenComparator());//取出最长元素
sop("max= "+max);
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
sop(list);//打印原集合
//Collections.sort(list);
Collections.sort(list,new StrLenComparator());//用集合工具进行排序,自定义比较器要传入集合工具中
sop(list);//打印比较后
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class StrLenComparator 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); //长度相等,按照自然顺序排序
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.*;
class StrCompatator implements Comparator<String>
{
public int compare(String s1, String s2)
{
return s2.compareTo(s1);
}
}
class CollectionsDemo2
{
public static void main(String[] args)
{
//fillDemo();
//replaceAllDemo();
//orderDemo();
shuffleDemo();
}
public static void shuffleDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
sop(list);
Collections.shuffle(list);对集合随机排序
sop(list);
}
public static void orderDemo()//反转
{
//TreeSet<String> ts = new TreeSet<String>(new StrCompatator());
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("abcde");
ts.add("aaa");
ts.add("kkk");
ts.add("ccc");
Iterator it = ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void replaceAllDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
sop(list);
Collections.replaceAll(list,"aaa","pp");//替换成指定元素
Collections.reverse(list);//反转
sop(list);
}
/*
练习:fill方法可以将list集合中所有元素替换成指定元素。
将list集合中部分元素替换成指定元素。
*/
public static void fillDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
sop(list);
Collections.fill(list,"pp");//把集合元素全部替换成pp
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
Arrays: 用于操作数组的工具类
里面都是静态方法。
asList: 将数组变成list集合
数组变集合
*/
import java.util.*;
class ArraysDemo
{
public static void main(String[] args)
{
//int[] arr = {2,4,5};
//System.out.println(Arrays.toString(arr));
/*
把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定的。
如果增删了,就会发生UnsupportedOperationException异常
*/
String[] arr = {"abc","cc","kkkk"};
List<String> list = Arrays.asList(arr);
sop("contains: "+list.contains("cc"));//判断是否包含
//list.add("cc");不可以增删
sop(list);
/*如果数组中的元素都是对象,那么变成集合时,数组中的元素
就直接转成集合中的元素。
如果数组中元素都是基本数据类型,那么会将该数组作为集合
中的元素存在。
int[] nums = {2,4,5};
List<int[]> li = Arrays.asList(nums);
sop(li);
*/
Integer[] nums = {2,4,5};
List<Integer> li = Arrays.asList(nums);
sop(li);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
集合变数组
Colletion接口中的toArray()方法
*/
import java.util.*;
class CollectionToArray
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
/*
1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法
内部会创建一个新的数组,长度为集合的size。
当指定类型的数组长度大于集合的size,就不会新创建的
数组。而是使用传递进来的数组。
所以,创建一个刚刚好的数组最优。
2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
*/
String[] arr = al.toArray(new String[al.size()]);//传递刚刚好长度的数组
System.out.println(Arrays.toString(arr));//转换成字符串输出
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
个人总结:
本文介绍了Java集合框架中Collections和Arrays工具类的多种实用方法,包括排序、查找、替换及集合与数组之间的转换等,帮助开发者高效操作集合与数组。
492

被折叠的 条评论
为什么被折叠?



