Java.util.Collections

集合框架工具类Collections,其方法都是静态的,本身没有构造函数。

常见方法:

static <T extends Comparable<? super T>> void sort(List<T> list)

package Day17;
import java.util.*;
public class CollectionsDemo {
public static void main(String[] args)
{
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("abzcd");
list.add("kkk");
list.add("qq");
System.out.println("排序前:"+list);
Collections.sort(list);
System.out.println("排序后:"+list);
}
}

运行结果:

排序前:[abcd, aaa, abzcd, kkk, qq]
排序后:[aaa, abcd, abzcd, kkk, qq]

static <T> void sort(List<T> list,Comparator<? super T>,c)加入比较器后的sort。

package Day17;
import java.util.*;
public class CollectionsDemo {
public static void main(String[] args)
{
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("abzcd");
list.add("kkk");
list.add("qq");
list.add("qq"); System.out.println("排序前:"+list);
Collections.sort(list,new StrLengComparator());
System.out.println("按照长度排序后:"+list);
}
}
class StrLengComparator implements Comparator<String>
{
public int compare(String s1,String s2)
{
if(s1.length()==s2.length())
return s1.compareTo(s2);
return s1.length()-s2.length();
}
}

运行结果:

排序前:[abcd, aaa, abzcd, kkk, qq, qq]
按照长度排序后:[qq, qq, aaa, kkk, abcd, abzcd]

public static <T extends Object & Comparable<? super T>> max(Collection<? extends T> coll)根据元素的自然顺序,返回给定的Collection的最大元素。Collection中的所有元素都必须实现Comparable接口。此外,Collection中的所有元素都必须是可相互比较的(也就是,对于collection中的任意e1和e2元素,e1.caompareTo(e2)不得抛出ClassCastException)。此方法在整个collection上进行迭代,所以他需要的时间与collection的大小成正比。

static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)使用二分搜索法搜索指定列表,以获得指定对象。(如果找不到该元素返回-index-1)

package Day17;
import java.util.*;
public class CollectionsDemo {
public static void main(String[] args)
{
binarySearchDemo();
}
public static void binarySearchDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("abzcd");
list.add("kkk");
list.add("qq");
list.add("qq"); System.out.println("排序前:"+list);
int index = Collections.binarySearch(list,"abcd");//使用集合工具
System.out.println("index="+index);
int index_my = myBinarySearch(list,"abcd");//使用自定义的二分查找法
System.out.println("index_my="+index_my); }
public static int myBinarySearch(List<String> list, String key)
{
int max,min,mid;
max = list.size()-1;
min = 0;
while (min <= max )
{
mid = (max + min) >> 1;
int num = list.get(mid).compareTo(key);
if (num>0)
max = mid-1;
else if (num<0)
min = mid+1;
else
return mid;
}
return -min-1;//如果找不到返回-index-1
}
}

运行结果:

排序前:[abcd, aaa, abzcd, kkk, qq, qq]
index=0
index_my=0

上面如果使用自定义的比较器,则

package Day17;
import java.util.*;
public class CollectionsDemo {
public static void main(String[] args)
{
binarySearchDemo();
}
public static void binarySearchDemo()
{
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("abzcd");
list.add("kkk");
list.add("qq");
list.add("qq"); System.out.println("排序前:"+list);
int index = Collections.binarySearch(list,"abcd");//使用集合工具
System.out.println("index="+index);
int index_my = myBinarySearch(list,"abcd",new StrLengComparator());//使用自定义的二分查找法
System.out.println("index_my="+index_my); }
public static int myBinarySearch(List<String> list, String key,Comparator cmp)
{
int max,min,mid;
max = list.size()-1;
min = 0;
while (min <= max )
{
mid = (max + min) >> 1;
int num = cmp.compare(list.get(mid),key);
if (num>0)
max = mid-1;
else if (num<0)
min = mid+1;
else
return mid;
}
return -min-1;//如果找不到返回-index-1
}
}
class StrLengComparator implements Comparator<String>
{
public int compare(String s1,String s2)
{
if(s1.length()==s2.length())
return s1.compareTo(s2);
return s1.length()-s2.length();
}
}

static <T> void fill(List<? super T> list, T obj>)使用指定元素替换指定列表中的所有元素。

package Day17;
import java.util.*; public class CollectionsDemo2 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkk");
System.out.println("使用fill前:"+list);
Collections.fill(list, "pp");
System.out.println("使用fill后:"+list);
}
}

运行结果:

使用fill前:[abcd, aaa, zz, kkkk]
使用fill后:[pp, pp, pp, pp]

static <T> boolean replaceAll(List<T> list, T oldVal, T newVal),将List集合中的指定元素替换成新元素。

package Day17;
import java.util.*; public class CollectionsDemo2 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkk");
System.out.println("使用replaceAll前:"+list);
//Collections.fill(list, "pp");
//System.out.println("使用fill后:"+list);
Collections.replaceAll(list,"aaa","zzz");
System.out.println("使用replaceAll后:"+list);
}
}

运行结果:

使用replaceAll前:[abcd, aaa, zz, kkkk]
使用replaceAll后:[abcd, zzz, zz, kkkk]

static <T> Comparator <T> reverseOrder(),返回一个比较器,可以强行逆转使用了Comparable接口的对象collection的自然排序。

未使用reverseOrder前:

package Day17;
import java.util.*; public class CollectionsDemo3 {
public static void main(String[] args){
TreeSet<String> ts = new TreeSet<String>();
ts.add("abcde");
ts.add("aaa");
ts.add("kkk");
ts.add("ccc");
for (Iterator it = ts.iterator(); it.hasNext(); ){
System.out.println(it.next());
}
}
}
运行结果:
aaa
abcde
ccc
kkk

使用reverseOrder后:

package Day17;
import java.util.*; public class CollectionsDemo3 {
public static void main(String[] args){
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("abcde");
ts.add("aaa");
ts.add("kkk");
ts.add("ccc");
for (Iterator it = ts.iterator(); it.hasNext(); ){
System.out.println(it.next());
}
}
}
运行结果:
kkk
ccc
abcde
aaa

并且该方法的重载方法static <T> Collection<T> reverseOrder(Comparator<T> cmp),可以强行逆转指定比较器的顺序。

static <T> List<T> synchronizedList(List<T> list),返回指定列表的线程同步(线程安全)的列表。

Java:集合工具类-Collections的更多相关文章

  1. Java 集合工具类---------- Collections类

  2. Java从零开始学二十四(集合工具类Collections)

    一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二 ...

  3. java之集合工具类Collections

    Collections类简介 java.utils.Collections 是集合工具类,用来对集合进行操作.此类完全由在 collection 上进行操作或返回 collection 的静态方法组成 ...

  4. Java—集合工具类

    集合中的元素工具类排序: Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作,还提供了将集合对象置为不可变.对 ...

  5. Java笔记(二十四)……集合工具类Collections&Arrays

    Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...

  6. Java常用类(五)之集合工具类Collections

    前言 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作, 还提供了将集合对象置为不可变.对集合对象实现同步控 ...

  7. java的集合工具类Collections

    集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么区别? Collection是集合框架中的一个顶层接口,它里面 ...

  8. 吴裕雄--天生自然java开发常用类库学习笔记:集合工具类Collections

    import java.util.Collections ; import java.util.List ; import java.util.Set ; public class Collectio ...

  9. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

随机推荐

  1. CocoaPod遇到更新不了的原因

    CocoaPods 1.0.1 is available. To update use: `gem install cocoapods` Until we reach version 1.0 the ...

  2. 如何关闭windows电脑的开机自启程序

    很多时候我们打开电脑会发现,莫名其妙的出现一些已经在运行的程序了,这都是一些开机自启的软件之类的.可能你的电脑配置本来就不怎么高,开机还这样,那估计会很卡顿,那有什么方法可以关闭这些开机自动启动的程序 ...

  3. Hadoop之为何不使用RAID?

    一.引言: 在一次和同事的讨论中遇到一个这样的问题:有一个hadoop集群,在hbase的put数据出现瓶颈,他们想要把datanode上的磁盘做成RAID 0(比如10块磁盘做成一个RAID 0), ...

  4. App.xaml

    <Application x:Class="HelloWorld.App" xmlns="http://schemas.microsoft.com/winfx/20 ...

  5. Shader的自定义特性使用

    使用自定义特性关键字,可以动态对Shader某一部分代码进行开关操作 shader(定义了KEYWORD1特性): 定义:#pragma shader_feature KEYWORD1 判断:#ifd ...

  6. 2016年12月18日 星期日 --出埃及记 Exodus 21:13

    2016年12月18日 星期日 --出埃及记 Exodus 21:13 However, if he does not do it intentionally, but God lets it hap ...

  7. 将B表的字段内容插入到A表字段中

    update hy_b_hacker as h , ( SELECT ( @rowNO := @rowNo +1 ) AS rowno, ip FROM ( SELECT * FROM hy_b_se ...

  8. minicom 使用教程

    因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择.目前知道的,PL2303的驱动是有的,在dev下的名称是ttyUSB#. minicom,tkterm都是linux下应用比 ...

  9. CentOs 设置静态IP 方法

    在做项目时由于局域网采用自动获取IP的方式,导到每次服务器重启主机IP都会变化. 为了解决这个问题,需要设置静态IP. 1.修改网卡配置 编辑:vi /etc/sysconfig/network-sc ...

  10. ubuntu下安装、启动和卸载SSH

    想往VMWare虚拟机上的Ubuntu里面拷贝代码,发现之前安装好的secureCRT链接不上.发现是ssh安装配置出了问题,于是就把openssh-server卸载后重装,发现又是与openssh- ...