您的位置:首页 > 编程语言 > Java开发

java基础集合操作工具类Collections简述(java集合四)

2015-06-06 09:55 501 查看



对集合中的元素进行排序

Collections中的sort方法使用

public class ListDemo {

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");

// 排序前
System.out.println(lis);// [asd, bvc, adv, sasd, aaas]
// 排序后
Collections.sort(lis);
System.out.println(lis);// [aaas, adv, asd, bvc, sasd]

//按照自定议的方式进行排序
Collections.sort(lis,new StringLengthSort());
System.out.println(lis);//[adv, asd, bvc, aaas, sasd]
}

}

// 定义一个按照字符串的长度比较器类
class StringLengthSort implements Comparator<String> {
@Override
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);
}
}


找出集合元素中的最大值

Collections中的求集合元素的最大值

public class ListDemo {

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");
// 对集合元素取最大值操作
String max = Collections.max(lis);
// 输出最大值
System.out.println(max);// sasd

List<Integer> list = new ArrayList();
list.add(245);
list.add(33);
list.add(785);
list.add(524);
list.add(2);
// 对集合元素取最大值操作
int max1 = Collections.max(list);
// 输出最大值
System.out.println(max1);// 785<pre name="code" class="java">}




查找集合中相关元素对应的角标

public class ListDemo {

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");
//需要调用sort方法进行集合排序
int index = Collections.binarySearch(lis, "sasd");

System.out.println("sasd 的角标是:"+index);//sasd 的角标是:3
}
}
详细说明:

public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过
sort(List)

方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个,

参数:
list
- 要搜索的列表。
key
- 要搜索的键。 返回:如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。抛出:
ClassCastException
- 如果列表中包含不可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。

使用自定义二分法查找

// 定义一个二分法查找方法
public static int dichotomyLookUpIndex(List<String> list, String key) {
int min = 0;// 记录最小值角标,默认为集合的开始位置
int mid; // 记录中间值位置
int max = list.size();;// 记录最大值位置

while (min <= max) {
// 得出中间值位置 key
mid = (min + max) / 2;
// 根据key来获取集合中对应的值
String str = list.get(mid);
// 进行比较
int num = str.compareTo(key);
// 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。
// 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
// 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。
// 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0
if (num > 0) {
max = mid - 1;
} else if (num < 0) {
min = mid + 1;
} else {
return mid;
}
}
return -min - 1;
}
}


替换集合中元素的操作

public class ListDemo {

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");

System.out.println("原集合数据:"+lis);//原集合数据:[asd, bvc, adv, sasd, aaas]

//替换指定元素内容
Collections.replaceAll(lis, "asd", "55555");
System.out.println("替换后集合数据:"+lis);//替换后集合数据:[55555, bvc, adv, sasd, aaas]

//将集合中的所有的元素进行替换
Collections.fill(lis, "0000");
System.out.println("替换后集合数据:"+lis);//替换后集合数据:[0000, 0000, 0000, 0000, 0000]
}
}


将集合中的元素反转操作

public class ListDemo {

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");

System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]
// 排序后
Collections.sort(lis);
System.out.println(lis);// [aaas, adv, asd, bvc, sasd]

// 反转操作后
Collections.reverse(lis);
System.out.println(lis);// [sasd, bvc, asd, adv, aaas]

}
}


对指定的列表进行置换

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");

System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]
//使用指定的随机源对指定列表进行置换。所有置换发生的可能性都是相等的,假定随机源是公平的。
//每次运行的结果都不一样
Collections.shuffle(lis, new Random());
System.out.println("Random集合数据:" + lis);//Random集合数据:[adv, aaas, sasd, bvc, asd]
}
}


交换集合中元素的位置

public static void main(String[] args) {

List<String> lis = new ArrayList();
lis.add("asd");
lis.add("bvc");
lis.add("adv");
lis.add("sasd");
lis.add("aaas");

System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]

//在指定列表的指定位置处交换元素。
Collections.swap(lis, 0, 1);
System.out.println("交换后的集合数据:" + lis);//交换后的集合数据:[bvc, asd, adv, sasd, aaas]
<pre name="code" class="java">}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: