package tools;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import comparator.ComparatorByLength;
public class CollectionsDemo {
public static void main(String[] args) {
/*
* 1. 将非同步的集合转成同步的集合
* 2. 获取List集合最值。
* 3. 对List集合排序。
* 4. 对List集合进行元素插入,并保持有序。
* 5. 对List集合进行按字符串由长到短排序。
* 6. 保留List集合前2个以及后2个元素,将其他元素替换为"null"。
*/
List<String> l = new ArrayList<String>();
init(l );
// 1. 将非同步集合转换成同步集合。
List<String> list = Collections.synchronizedList(l );
// 2. 获取List集合最值。
String max = Collections. max(list); // "zzz"
String min = Collections. min(list); // "abcde"
// 3. 对List集合排序。
Collections.sort(list ); // [ abcde, it&java, java, me, nba, zoom, zzz ]
// 4. 对List集合进行元素插入,并保持有序。
String str = "niubility";
int index = Collections.binarySearch(list , str );
// 如果集合中无此元素,则返回-(insertion point) - 1
if (index < 0) {
index = -(index + 1);
}
list.add(index, str); // [abcde, it&java, java, me, nba, niubility , zoom, zzz]
// 5. 对List集合进行按字符串由长到短排序。
Collections.sort(list , Collections.reverseOrder (new ComparatorByLength()));
// [niubility, it&java, abcde, zoom, java, zzz , nba, me]
// 6. 保留List集合前2个以及后2个元素,将其他元素替换为"null"。
replaceFunc(list ); // [ niubility, it&java, null, null, null, null, nba, me]
}
private static void replaceFunc(List<String> list) {
List<String> l = new ArrayList<String>();
// 1. 先将中间需要替换的元素存入新集合,并在老集合中删除这些元素。
for (int i = 2; i < list.size() - 2; i++) {
l.add(list.get(i));
/*
* 由于remove会使得后面的元素替代到这个位置上
* 所以要让i--抵消掉下一轮的i++,也就是说重新判断该位置上的元素。
* 并且每趟循环必须重新计算list.size();
*/
list.remove(i--);
}
// 2. 将新集合中的元素全部替换。
Collections.fill(l , "null" );
// 3. 将新集合中的元素全部添加回老集合。
list.addAll(2, l);
}
public static void init(Collection<String> c) {
c.clear();
c.add("java");
c.add("abcde");
c.add("zzz");
c.add("it&java");
c.add("me");
c.add("nba");
c.add("zoom");
}
}
package tools;
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
/*
* Arrays: 用于操作数组的工具类,由一系列静态方法构成。
* 1. 对数组排序。
* 2. 二分查找。
* 3. 数组复制。
* 4. 对两个数组进行元素的比较,判断两个数组是否相同。
* 5. 将数组转成字符串。
*/
int[] arr = {34, 21, 67, 99, 18};
// 1. 对数组排序。
Arrays.sort(arr ); // [18, 21, 34, 67, 99]
// 2. 二分查找。
int index1 = Arrays. binarySearch(arr, 55); // -4 (-(insertion point) - 1)
int index2 = Arrays. binarySearch(arr, 67); // 3
// 3. 数组复制
int[] arrCopy = Arrays.copyOfRange(arr , 1, 3); // [21, 34],含头不含尾
// 4. 对两个数组进行元素的比较,判断两个数组是否相同。
boolean b = Arrays. equals(arr, arrCopy); // false
// 5. 将数组转换成字符串
String str = Arrays.toString(arr ); // [18, 21, 34, 67, 99]
System.out.println( str);
}
}
package collection.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class List2Array {
public static void main(String[] args) {
/*
* 数组转集合
* 目的:使得可以使用集合中的方法对元素进行操作。
* 但是不可修改集合,因为得到的集合是常量集合,否则UnsupportedOperationException
* 如果数组中存储的是基本数据类型,那么转成集合,数组对象会作为集合中唯一的元素存在。
* 如果数组中存储的是引用数据类型,那么转成集合,数组元素会作为集合元素存在。
*/
int[] arr = {22, 85, 45, 65, 19, 4, 96};
String[] strs = {"a", "b", "c" };
// 数组转集合
List<int[]> listArr = Arrays.asList( arr); // [[I@15db9742]
List<String> listStr = Arrays. asList(strs); // [a, b, c]
/*
* 集合转数组
* 目的:限制对元素的增删操作。
* 如果传递的数组的长度小于集合的长度,会创建一个同类型的数组,长度为集合的长度。
* 如果传递的数组的长度大于集合的长度,就会使用这个数组,没有存储元素的位置为null。
* 长度最好直接定义为和集合长度一致。
*/
Collection<String> c = new ArrayList<String>();
init(c );
// 集合转数组
String[] arrStrs = c.toArray( new String[ c.size()]);
// [java, abcde, zzz, itheima , me]
// 也可以用无参数的toArray方法,但是该方法返回Object类型数组,需要向下转型才可以使用。
}
public static void init(Collection<String> c) {
c.clear();
c.add("java");
c.add("abcde");
c.add("zzz");
c.add("itheima");
c.add("me");
}
}
package tools;
public class MathDemo {
public static void main(String[] args) {
/*
* Math数学运算。方法都是静态的。
*/
int i = Math.abs(-4); // 4
double d0 = Math. sqrt(16); // 4
double d1 = Math. cbrt(8); // 2
double d2 = Math. ceil(12.54); // 13.0
double d3 = Math. floor(12.54); // 12.0
long d4 = Math.round(12.54); // 13
double d5 = Math. pow(10.1, 3.1); // 1298.3633826837624
double dr = Math. random(); // 0~1的随机数
}
}
package tools;
import java.util.Properties;
public class SystemDemo {
public static void main(String[] args) {
// 1. 数组复制
byte[] src = {5, 3, 7, 1, 9};
byte[] dest = new byte[5];
System.arraycopy(src , 2, dest , 0, 3); // [7, 1, 9, 0, 0]
// 2. 获取系统时间(毫秒)
long timeMillis = System. currentTimeMillis(); // 1418684143024
// 3. 获取当前时间(纳秒,常用作计算程序消耗时间)
long timeNano = System. nanoTime(); // 53653295860546
// 4. 结束虚拟机
//System.exit(0);
// 5. 垃圾回收
System.gc();
// 6. 获取系统属性集或者属性集中的数据
Properties prop = System. getProperties();
String osName = System. getProperty("os.name"); // Windows 7
// 7. 设置系统属性集
String osOldName = System. setProperty("os.name", "Windows 18");
String osNewName = System. getProperty("os.name"); // Windows 18
// 8. 获取当前系统下的换行符
String ls = System.lineSeparator();
String str = "java" + ls + "happy";
// java
// happy
}
}