Java基础详解之集合框架工具Collections
作者:油炸冰可乐 发布时间:2021-11-09 02:40:32
标签:java,集合,框架,工具,Collections
一、Collections
说明:Collcetions是集合框架中的工具,特点是方法都是静态的。
二、Collections中的常见方法
1,对list进行二分查找:前提该集合一定要有序。
int binarySearch(list,key);//要求list集合中的元素都是Comparable的子类。
int binarySearch(list,key,Comparator);
2,对list集合进行排序。
sort(list);
sort(list,comaprator);
3,对集合取最大值或者最小值。
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)
4,对list集合进行反转。
reverse(list);
5,对比较方式进行强行逆转。
Comparator reverseOrder();
Comparator reverseOrder(Comparator);
6,对list集合中的元素进行位置的置换。
swap(list,x,y);
7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。
replaceAll(list,old,new);
三、Aarrays:用于对数组操作的工具类
1,binarySearch(int[])
binarySearch(double[])...
2,sort(int[])
sort(char[])....
3,toString(int[]).....:将数组变成字符串。
4,copyOf();复制数组。
5,copyOfRange():复制部分数组。
6,equals(int[],int[]);比较两个数组是否相同。
7,List asList(T[]);将数组变成集合。
这样可以通过集合的操作来操作数组中元素,
但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现UnsupportOperationExcetion。
可以使用的方法:contains,indexOf。。。
如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。
如果数组中的存入的应用数据类型,那么asList会将数组中的元素作为集合中的元素。
如果想要将集合变数组:
可以使用Collection中的toArray方法。
传入指定的类型数组即可,该数组的长度最好为集合的size。
四、二分查找过程中的默认比较器
// 在二分查找中设定默认的比较器
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class binarySerach {
public static void main(String[] args)
{
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>(); // List集合没有比较方法
list.add("abcd");
list.add("aaa");
list.add("bbb");
list.add("abcdcdc");
list.add("z");
list.add("zz");
list.add("qq");
sop("原集合为:"+list);
int index = Collections.binarySearch(list,"bbb",new StrLenComparator2());
sop("自定义比较器的index: "+index);
int index2 = Collections.binarySearch(list,"abcd");
sop("不传入比较器index:"+index2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class StrLenComparator2 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.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
public class CollectionToArray {
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
al.add("ABC1");
al.add("ABC2");
al.add("ABC3");
al.add("ABC4");
al.add("ABC5");
System.out.println(al);
String[] arr = al.toArray(new String[al.size()]); // toArray 方法把集合转换为数组
System.out.println(Arrays.toString(arr));//打印内容
}
}
六、增强for循环
// 增强for循环的出现是为了解决总是使用迭代器方法进行元素提取
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ForEachDemo {
public static void main(String[] args)
{
// 例子一:
ArrayList<String> al = new ArrayList<String>();
al.add("ABC1");
al.add("ABC2");
al.add("ABC3");
al.add("ABC4");
for(String s : al)
{
System.out.println(s);
}
//System.out.println(al);
// 例子二:HashMap的增强for循环,使用entrySet()
System.out.println("例子二:HashMap的增强for循环,使用entrySet()");
HashMap<Integer,String> hm = new HashMap<Integer, String>();
hm.put(1,"Wzy1");
hm.put(2,"Wzy2");
hm.put(3,"Wzy3");
hm.put(4,"Wzy4");
for (Map.Entry<Integer,String> it : hm.entrySet())
{
System.out.println("Key: "+it.getKey()+"--- Value:"+it.getValue());
}
// 例子三:HashMap的增强for循环,使用KeySet()
System.out.println("例子三:HashMap的增强for循环,使用KeySet()");
Set<Integer> keySet = hm.keySet();
for(Integer i : keySet)
{
System.out.println("Key: "+i+"--- Value:"+hm.get(i));
}
}
}
七、关于可变参数的方法
一般的,在java中使用重载的方法应对不同的数据对象,让它们都可以使用方法,但是还有一种写法,可以只写一个方法来接收数据,也不需要建立新的对象。
// 例子一:
public class mutilMethod {
public static void main(String[] args)
{
show(1,2,3,4,5);
}
public static void show(int...a) // 可变参数写法,数组的特殊值放在开头
{
System.out.println(a.length);
}
}
//例子二:数组有特殊的
public class mutilMethod {
public static void main(String[] args)
{
show("字符串",2,3,4,5); // 特殊字符String与int发生组合
}
public static void show(String c, int...a) // 可变参数写法,数组的特殊值放在开头
{
System.out.println(a.length);
}
}
八、关于reverseOrder函数使用
(1)Collections提供的比较器作为新比较器
(2)强行逆转现有比较器
import java.util.*;
public class reverseOrder {
public static void main(String[] args)
{
sortDemo();
}
public static void sortDemo()
{
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder()); // 传入reverseOrder()将集合倒序排列
ts.add("aaa");// 或者手写一个自定义比较器,之后使用reverseOrder()函数强行逆转
ts.add("abc");
ts.add("a");
ts.add("aa");
ts.add("bbb");
ts.add("cccc");
ts.add("ddddd");
ts.add("eeeeee");
Iterator it = ts.iterator();
while (it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
九、静态类导入
import java.util.*;
import static java.util.Arrays.*;
import static java.lang.System.*;
public class StaticImport extends Object {
public static void main(String[] args)
{
int[] arr = {3,1,5};
sort(arr); // 去掉了Arrays.
int index = binarySearch(arr,1);// 去掉了Arrays.
System.out.println(Arrays.toString(arr)); // 不能去掉Arrays.
out.println("index = "+index);// 去掉System.
}
}
来源:https://blog.csdn.net/Wang_Pro/article/details/108147679


猜你喜欢
- 前言相信大家在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,本文将给大家
- 因为公司现在换成了nacos,所以自己写了demo学习一下。结果第一步就走不下去。在使用nacos-config读取nacos配置时。发现b
- 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展
- 本文实例讲述了C#简单输出日历的方法。分享给大家供大家参考。具体如下:用C#输出日历,此功能可用于Ajax方式列出计划日程相关的内容,由于是
- 先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。思路判断网络状态(写个
- 结构图: 抽象对象: abstract class Component  
- 使用Android Studio 创建Android项目,分享给大家(1) 说明:还有一部分人在坚持使用 Eclipse ,建议抓紧换掉。使
- Java(和其他语言)通过内部类支持嵌套类。要使其正常工作,需要编译器执行一些技巧。这是一个例子:public class Outer {
- 前言对象关系映射(ORM)已经被使用了很长时间,以解决在编程过程中对象模型与数据模型在关系数据库中不匹配的问题。Dapper是由Stack
- 作为Android开发者,工作中少不了要反编译别人的apk,当然主要目的还是为了学习到更多,取彼之长,补己之短。今天就来总结一下Androi
- 本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js、css这些静态文件的加载配置,以及服务器推送的两种实现方式。当然我们在
- 进程之间的通信是为了解决不同进程之间的数据传输问题,这样可以让不同程序交互数据。实现进程通信的方式:1、剪切板;2、COM;3、内存映射文件
- 概念里氏替换原则是任何基类出现的地方,子类一定可以替换它;是建立在基于抽象、多态、继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,
- 1.打开官网稍微学习一下,了解一下spring cloud是个什么东西,大概有哪些组件等https://spring.io/projects
- 引言大家应该都知道,对Excel表格设置分页对我们预览、打印文档时是很方便的,特别是一些包含很多复杂数据的、不规则的表格,为保证打印时每一页
- 我就废话不多说了,大家还是直接看代码吧~/** * 从list中随机抽取元素 * * @param
- 在Android开发中,经常会遇到这样一种情况,即需要将用户偏好设置(如用户偏好的app色彩主题)、与特定登录用户相关的设置(如不同登陆用户
- 起因unity程序build到pc上,拿到其他人的机器上结果有些功能不正常,看log里面大概是Fallback handler could
- Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同
- 元注解是负责对其它注解进行说明的注解,自定义注解时可以使用元注解。Java 5 定义了 4 个注解,分别是 @Documented、@Tar