Java基础—集合框架(四)
来源:互联网 发布:美国大学教育专业知乎 编辑:程序博客网 时间:2024/06/05 09:55
- 一集合框架工具类
- 二增强for循环
- 三JDK50之后新特性
- 四API中其他对象
一、集合框架工具类
- 1.Collections工具类
- 1)定义
Collections
工具类用于对集合进行各种操作。- 2)常用方法
- 1> 排序操作
格式:
static void sort(List list):自然排序
static void sort(List list, Comparator c):自定义排序示例代码:
package com.heisejiuhuche.Collection;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class CollectionsDemo1 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkkk"); list.add("qq"); list.add("zz"); print(list); /* 按自然顺序排序 */ Collections.sort(list); print(list); Collections.sort(list, new StrLenComp()); print(list); } private static <T> void print(T t) { System.out.println(t); }}/* * 自定义排序 */class StrLenComp implements Comparator<String> { public int compare(String s1, String s2) { int num = new Integer(s1.length()).compareTo(new Integer(s2.length())); if(num == 0) { return s1.compareTo(s2); } return num; }}
程序输出结果:
[abcd, aaa, z, kkkkk, qq, zz][aaa, abcd, kkkkk, qq, z, zz][z, qq, zz, aaa, abcd, kkkkk]
- 2> 获取最大元素
格式:
static max(Collection coll): 根据元素的自然顺序,返回指定collection中的最大元素
static T max(Collection coll, Comparator comp):获取指定排序下的最大元素示例代码(以上述代码为例):
Collections.max(list);
程序输出结果:zzCollections.max(list, new StrLenComp());
程序输出结果:kkkkk
- 3> 二分搜索
格式:
static int binarySearch(List<? extends Comparable<? super T>> list, T key):搜索指定元素
static int binarySearch(List<? extends T> list, T key, Comparator<? super T> c):自定义比较器,二分搜索指定元素示例代码:
Collections.sort(list);
程序输出结果:0Collections.sort(list, new StrLenComp());
print(Collections.binarySearch(list, “aaa”, new StrLenComp()));
程序输出结果:3
- 4> 替换反转
格式:
static void fill(List<? super T> list, T obj):用指定元素替换集合中所有元素示例代码:
Collections.fill(list, “java”);
print(list);
程序输出结果:[java, java, java, java, java, java]static boolean replaceAll(List list, T oldVal, T newVal):用新值替换全部旧值
示例代码:print(list);
Collections.replaceAll(list, “aaa”, “java”);
print(list);
程序输出结果:
[z, qq, zz, aaa, abcd, kkkkk]
[z, qq, zz, java, abcd, kkkkk]static void reverse(List<?> list):反转集合元素
示例代码:print(list);
Collections.reverse(list);
print(list);
程序输出结果:
[z, qq, zz, aaa, abcd, kkkkk]
[kkkkk, abcd, aaa, zz, qq, z]static void swap(List<?> list, int i, int j):交换List集合指定位置上的元素
示例代码:Collections.swap(list, 1, 2);
print(list);
程序输出结果:
[abcd, aaa, z, kkkkk, qq, zz]
[abcd, z, aaa, kkkkk, qq, zz]static void shuffle(List<?> list):随机置换List集合元素
示例代码:Collections.shuffle(list);
print(list);
程序输出结果:
[abcd, aaa, z, kkkkk, qq, zz]
[z, kkkkk, aaa, qq, abcd, zz]static Comparator reverseOrder():以自然排序倒序的方式排列元素
示例代码:TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add(“abcd”);
ts.add(“aaa”);
ts.add(“z”);
ts.add(“kkkkk”);
ts.add(“zz”);
System.out.println(ts);
程序输出结果:
[zz, z, kkkkk, abcd, aaa]自然顺序倒序排序static Comparator reverseOrder(Comparator cmp):反转现有比较器顺序
示例代码:TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new StrLenComp()));
ts.add(“abcd”);
ts.add(“aaa”);
ts.add(“z”);
ts.add(“kkkkk”);
ts.add(“zz”);
System.out.println(ts);
程序输出结果:
[kkkkk, abcd, aaa, zz, z]反转自定义比较器顺序排序
- 5> 线程同步
static List synchronizedList(List list):返回线程同步安全的List集合
- 2.Arrays工具类
- 1)定义
Arrays
工具类用于对数组进行各种操作。- 2)常用方法
- 1>输出数组:
String toString()
示例代码:
package com.heisejiuhuche.Collection;import java.util.Arrays;public class ArraysDemo { public static void main(String[] args) { int[] arr = new int[]{2, 4, 5, 7}; System.out.println(Arrays.toString(arr)); }}
程序输出结果:[2, 4, 5, 7]
- 2> 将数组转换为List集合
static List asList(T… a):使用集合的思想和方法操作数组中元素
示例代码:
package com.heisejiuhuche.Collection;import java.util.Arrays;import java.util.List;public class ArraysDemo { public static void main(String[] args) { /* 引用数据类型 */ String[] string = {"abc", "kkk", "aq"}; List<String> strList = Arrays.asList(string); System.out.println(strList); /* 基本数据类型 */ int[] arr = new int[]{2, 4, 5, 7}; List<int[]> arrList = Arrays.asList(arr); System.out.println(arrList); /* 引用数据类型 */ Integer[] integer = {2, 4, 5, 7}; List<Integer> intList = Arrays.asList(integer); System.out.println(intList); }}
程序输出结果:
[abc, kkk, aq][[I@15db9742][2, 4, 5, 7]
注意:
-将数组变成集合,不能使用集合的增删方法;因为数组的长度是固定的;可以使用判断和获取方法;如果做增删操作,会发生UnsupportedOperationException;
-如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素;如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存储
- 3> Collection接口将集合转换为数组
T[] toArray(T[] a)
示例代码:
package com.heisejiuhuche.Collection;import java.util.ArrayList;import java.util.Arrays;public class CollectionToArrayDemo { public static void main(String[] args) { ArrayList<String> al= new ArrayList<String>(); al.add("arbc"); al.add("abdc"); al.add("afbc"); String[] string = al.toArray(new String[al.size()]); System.out.println(Arrays.toString(string)); }}
程序输出结果:[arbc, abdc, afbc]
注意:
-集合转换成数组是为了限定对元素的操作;不能进行增删,只能进行查找获取;
-当指定类型的数组长度小于集合的size,那么toArray()方法内部就会创建一个新的数组,长度为集合的size;当指定类型的数组长度大于集合的size,就使用传递进来的数组;开发过程中,创建一个长度刚好的数组效率最优,故使用al.toArray(new String[al.size()]);
二、增强for循环
- 1.功能
- 增强for循环简化了代码,但是其局限性在于,只能对集合的元素进行取出操作,无法修改。
- 2.与传统for循环的区别
- 增强for循环有一个局限性,必须有被遍历的目标。建议在遍历数组的时候使用传统for循环,因为传统for循环可以定义下标,方便元素操作。
- 3.格式
for(数据类型 变量名 : 被遍历的集合(Collection)或数组)
示例代码:
package com.heisejiuhuche.Collection;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class EnhancedForDemo { public static void main(String[] args) { int[] arr = new int[]{3, 5, 7, 9}; for(int x : arr) { System.out.println(x); } ArrayList<String> al = new ArrayList<String>(); al.add("java01"); al.add("java02"); al.add("java03"); al.add("java04"); for(String str : al) { System.out.println(str); } HashMap<Integer, String> hm = new HashMap<Integer, String>(); hm.put(01, "java04"); hm.put(02, "java05"); hm.put(03, "java06"); /* keySet取出元素 */ for(Integer i : hm.keySet()) { System.out.println(i + ":::" + hm.get(i)); } /* entrySet取出元素 */ for(Map.Entry<Integer, String> me : hm.entrySet()) { System.out.println(me.getKey() + "----" + me.getValue()); } }}
程序输出结果:
3579java01java02java03java041:::java042:::java053:::java061----java042----java053----java06
注意:
在使用增强for循环输出List集合的时候,如果集合上没有定义泛型,for循环中也不能指定输出的变量类型,只能写Object
三、JDK5.0之后新特性
- 1.可变参数
- 1)功能
- 可变参数省去了当参数类型相同,而参数个数不同时的方法重载,简化了代码。
- 2)格式
public void method(参数类型... 参数名)
- 3)应用
- 在使用可变参数的时候,虚拟机隐式地将传入的参数封装成数组,传给
method()
方法。示例代码:
package com.heisejiuhuche.Collection;public class ParamDemo { public static void main(String[] args) { show(); } private static void show(int... arr) { System.out.println(arr); }}
程序输出结果:[I@15db9742
,这是一个数组对象。
注意:
在使用方法的可变参数时,可变参数一定要定义在参数列表的最后一项示例代码:
package com.heisejiuhuche.Collection;public class ParamDemo { public static void main(String[] args) { show(1, "abc", "cdd", "eee"); } private static void show(int a, String... str) { System.out.println(a); for(int x = 0; x < str.length; x++) { System.out.println(str[x]); } }}
程序输出结果:
1abccddeee
如果写成private static void show(String... str, int a)
,编译报错。
- 2.静态导入
- 1)功能
- 当被使用的一个类中全部都是静态成员的时候,可以将这个类的静态成员全部导入;那么之后在使用这个类的静态成员时,不需要指定类名(同名方法除外),简化代码;这样的导入方式称为静态导入。
- 2)格式
- 在
import
关键字后加上static
:import static java.util.Arrays.*;
- 3)应用
示例代码:
package com.heisejiuhuche.Collection;/* 到处Arrays工具类中的所有静态成员 */import static java.util.Arrays.*;import java.util.Arrays;public class StaticImport { public static void main(String[] args) { int[] arr = {3, 5, 1, 6, 7, 9}; sort(arr); int index = binarySearch(arr, 1); /* 和Object类当中的toString()方法重名,那么Arrays类名必须指定 */ System.out.println(Arrays.toString(arr)); System.out.println("index: " + index); }}
程序输出结果:
[1, 3, 5, 6, 7, 9]index: 0
四、API中其他对象
- 1.System类
- 1)定义
System
类包含一些有用的类字段和方法。它的成员都是静态的。 该类不能被实例化。- 2)常用方法
- 获取系统属性信息:
Properties getProperties();
Properties
是HashTable
的子类,存储的键值对都是字符串,可以通过Map
的方法取出该集合中的元素。示例代码:
package com.heisejiuhuche.api;import java.util.Map;import java.util.Properties;public class SystemDemo { public static void main(String[] args) { Properties prop = System.getProperties(); /* 设置自定义属性 */ /* 输出结果:myProp:myValue */ System.setProperty("myProp", "myValue"); /* 获取指定属性信息 */ /* 输出结果:Windows 8.1 */ String str1 = System.getProperty("os.name"); System.out.println(str1); /* 获取所有属性信息 */ for(Object obj : prop.keySet()) { String str = (String)prop.get(obj); System.out.println(obj + ":" + str); } }}
部分系统信息:
java.runtime.name:Java(TM) SE Runtime Environmentsun.boot.library.path:C:\Program Files\Java\jre1.8.0_25\binjava.vm.version:25.25-b02user.country.format:CN
- 2.Runtime类
- 1)定义
每个Java应用程序都有的使应用程序能和其运行环境相连接的类。该类不能被实例化,通过
getRuntime()
方法获得其实例。Runtime
类运用了单例设计模式。- 2)常用方法
- 执行命令:
exec(command)
该方法可以打开指定的或Path路径中的应用程序。
示例代码:
package com.heisejiuhuche.api;import java.io.IOException;public class RuntimeDemo { public static void main(String[] args) { Runtime r = Runtime.getRuntime(); try { /* 打开记事本 */ r.exec("notepad java.txt"); } catch (IOException e) { e.printStackTrace(); } }}
上述代码可以用记事本打开java.txt文件
- 3.Date类
- 1)定义
Date
类表示特定的瞬间。该类允许将时间解释为年、月、日、小时、分钟和秒值,也允许格式化和解析日期字符串。- 2)常用方法
- 格式化日期:
format(Date d)
利用
SimpleDateFormat
类中的format()
方法,格式化Date
对象。示例代码:
package com.heisejiuhuche.api;import java.text.SimpleDateFormat;import java.util.Date;public class DateDemo { public static void main(String[] args) { Date d = new Date(); System.out.println(d); /* 声明SimpleDateFormat对象,初始化时间格式 */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss"); /* 调用format()方法格式化当前时间 */ System.out.println(sdf.format(d)); }}
程序输出结果:
Wed Apr 08 21:59:18 CST 20152015年04月08日星期三 09:59:18
- 4.Calendar类
- 1)定义
Calendar
类是一个抽象类,它为日期时间提供了一些方法,来操作日历字段。- 2)常用方法
- 获取指定日期字段:
int get(int field)
自定义日期字段:
void set()
给指定日期字段添加或减去指定时间量:
void add(int field, int amount)
示例代码:
package com.heisejiuhuche.api;import java.util.Calendar;public class CalendarDemo { public static void main(String[] args) { Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR) + "年"); System.out.println((c.get(Calendar.MONTH) + 1) + "月"); System.out.println(c.get(Calendar.DAY_OF_MONTH) + "日"); System.out.println("第" + c.get(Calendar.WEEK_OF_MONTH) + "周"); System.out.println("星期" + (c.get(Calendar.DAY_OF_WEEK) - 1)); c.set(Calendar.YEAR, 2500); System.out.println(c.get(Calendar.YEAR) + "年"); c.add(Calendar.DAY_OF_MONTH, 5); System.out.println(c.get(Calendar.DAY_OF_MONTH) + "日"); }}
程序输出结果:
2015年4月9日第2周星期42500年14日
- 5.Math类
- 1)定义
Math
类封装了进行如加减乘除底数对数等的基本数学运算的方法。- 2)常用方法
- 获取大于或等于指定数字的最小整数:
double ceil(double a)
获取小于或等于指定数字的最大整数:
double floor(double f)
四舍五入:
long round(double d)
获取指定数字的指定次幂:
double pow(double a, double b)
获取带正号的大于等于
0.0
且小于1.0
之间的double
值:double random()
使用
Random
类:Random r = new Random()
示例代码:
package com.heisejiuhuche.api;import java.util.Random;public class MathDemo { public static void main(String[] args) { Random r = new Random(); System.out.println(Math.ceil(12.34)); System.out.println(Math.floor(12.34)); System.out.println(Math.round(12.56)); System.out.println(Math.pow(2, 4)); for(int x = 0; x < 3; x++) { System.out.println(Math.random()); } /* 获取1到10(包含)的随机数 */ System.out.println(r.nextInt(10) + 1); }}
程序输出结果:
13.012.01316.00.79957360925360220.45453347785121390.091226017334940858
- Java基础—集合框架(四)
- Java基础---集合框架四(Map)
- Java基础——集合框架(四)
- Java基础——Java重点基础之集合框架(四)
- 黑马程序员——JAVA基础------集合框架(四)----Map集合
- Java基础篇(四——1)——集合框架之Collection接口
- Java基础篇(四——2)——集合框架之Map接口
- Java基础—集合框架(一)
- Java基础—集合框架(二)
- Java基础—集合框架(三)
- Java基础—集合框架
- Java集合框架(四)
- Java基础--集合框架(Map集合)
- Java集合框架(四)_day18
- java集合框架总结(四)
- Java集合框架基础
- java基础:集合框架
- Java基础:集合框架
- SD卡中FAT32文件格式快速入门(图文详细介绍)
- CountDownLatch使用
- Linux 整理
- C++友元简介:友元函数,友元类和友元成员函数
- Linux下DIR,dirent,stat等结构体详解
- Java基础—集合框架(四)
- 螺旋矩阵
- Oracle 去除字符传中重复的记录 自定义函数
- 常见算法时间复杂度
- 杭电 HDU ACM 2048 神、上帝以及老天爷
- androidの异常:java.lang.IllegalStateException: ImageLoader must be init with configuration befor 错误解决方法
- WEKA连接MySQL
- 开灯问题 简单模拟法
- 银行家算法