(19)集合工具类
来源:互联网 发布:js分割数字 编辑:程序博客网 时间:2024/06/14 18:29
1…Collections
Collections用于对集合进行操作的工具类,里面都是静方法
1.1…sort()方法
a…
static <T extends Comparable<? superT>> 对list集合进行排序...泛型定义在方法上了
void
sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
这个T元素可以是任意类型但是必须具备比较性,所以就要对定义的泛型进行一下泛型的限定T extendsComparable<? super T>,,T必须是Comparable的子类,
b…
static <T> void // 这里的<T>不用做泛型限定,,,这里有了比较器了就不用看对象的自然顺序了
sort(List<T> list, Comparator<? superT> c) 传个比较器进行排序
代码:
//自定义一个比较器
class StrLenComparator implementsComparator<String> 比较器
{
publicint compare(String s1,String s2)
{
if(s1.length()>s2.length())
return1;
if(s1.length()<s2.length())
return-1;
returns1.compareTo(s2);
}
}
1.2…max方法
获取一堆对象中的最大元素,,这对象必须具备比较性,,,,<T extends Object& Comparable<? super T>>泛型限定,,只有这个传入的集合里的元素具备比较性才能取出最大值
static <T extends Object &Comparable<? super T>> T
max(Collection<? extends T> coll)
根据元素的自然顺序,返回给定collection 的最大元素。
参数:
coll - 将确定其最大元素的 collection。
返回:
根据元素的自然顺序 返回给定 collection 的最大元素。
1.3.. binarySearch()方法
对集合进行二分查找,,但这集合必须是list集合,因为list有索引二分查找涉及到角标,,,使用binarySearch时集合必须是有序集合
static <T> int
binarySearch(List<? extends Comparable<?super T>> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。 在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。
在使用binarySearch方法时list集合里面的元素不带比较性那么就用比较器
public static <T> intbinarySearch(List<? extends T> list,
T key,
Comparator<? super T> c)
1.4.。。替换:
a…
static <T> void
fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。
参数:
list - 使用指定元素填充的列表。
obj - 用来填充指定列表的元素。
fill方法可以将list集合中的所有元素替换成指定元素。
b…
将list集合中部分元素替换成指定元素。
List<E> subList(int fromIndex, inttoIndex) 返回list集合中的一部分
返回列表中指定的fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
c….
static <T> booleanreplaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。更确切地讲,使用 newVal 替换 list 中满足(oldVal==null ? e==null : oldVal.equals(e)) 的每个 e 元素。(此方法对列表的大小没有任何影响。)
参数:
list - 在其中进行替换的列表。
oldVal - 将被替换的原值。
newVal - 替换 oldVal 的新值。
1.5…reverseOrder()
static <T> Comparator<T>reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 将按照逆字典(字母)顺序对数组进行排序。
代码:
public static void orderDemo()
{
TreeSet<String>ts = new TreeSet<String>(Collections.reverseOrder()); 传一个逆向比较器,就是把ts集合里面按元素的自然顺序排序的元素(aaa,abcde,cc,k)全部倒转,,reverseOrder()方法是把 按元素的自然顺序排序的集合倒序,,Collections.reverseOrder()就返回一个比较器,,,只是这个比较器是把 按元素的自然顺序排序的集合倒序
ts.add("abcde");
ts.add("aaa");
ts.add("k");
ts.add("cc");
Iteratorit = ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
1.6.. synchronizedCollection()
集合中那么多的对象都不是线程安全的,,高效,,多线程操作时就出问题了,,那可以自己加锁,,集合里面的添加和删除方法都得封装到一个锁里面去,在某一个时刻只能有一个线程进行添加或者删除,,但是自己加锁很麻烦,,,,Collections集合工具类提供了一个synchronizedCollection方法意思是你把你那个不安全的集合交给我,,我给你一个安全的集合,,把你那个不同步的集合交给我,,我给你一个同步的集合
static <T> List<T>
synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。
static <K,V> Map<K,V>
synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射。
1.7…swap交换元素位置
static void swap(List<?> list, int i,int j) 把集合里的角标i和j的元素调换了,,,变为角标i的元素是原来角标j的元素
在指定列表的指定位置处交换元素。 注意; swap方法不能操作treeset集合,只能操作list,因为list有索引,,swap方法操作角标
1.8…shuffle()随机交换位置
static void shuffle(List<?> list)
使用默认随机源对指定列表进行置换。 对集合的位置进行随机置换,所有置换发生的可能性都是大致相等的。,就是对集合所有的元素进行掉乱顺序
static void shuffle(List<?> list,Random rnd)
使用指定的随机源对指定列表进行置换。
2…Arrays数组工具类
Arrays:用于操作数组的工具类。Arrays是操作数组的
里面都是静态方法。binarySearch方法可以对多种数据类型的数据进行二分查找,,这样我们就不用自己写折半查找的方法了
方法:
a…
asList:将数组变成list集合
static <T> List<T>
asList(T... a) 参数是数组,,他可以把数组变为list集合
返回一个受指定数组支持的固定大小的列表。
b…
public static boolean equals(boolean[] a,
boolean[] a2)如果两个指定的 boolean 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。
他在比较的是2个数组中的内容是否相同
c…
static void fill(int[] a, int val) 数组里的所有元素替换成val
将指定的 int 值分配给指定 int 型数组的每个元素。
d…
static int hashCode(boolean[] a) 获取数组的哈希值
基于指定数组的内容返回哈希码。
e…
static void sort(int[] a) 对数组进行排序
对指定的 int 型数组按数字升序进行排序。
static void sort(double[] a, int fromIndex,int toIndex) 对数组里面一定范围内的数据进行排序,比如对数组里0-3包括2位置上的元素进行排序,,其他位置不动
对指定 double 型数组的指定范围按数字升序进行排序。
f…
static String toString(int[] a)
返回指定数组内容的字符串表示形式。 让数组变成字符串
3…. 集合变数组
集合变数组。
Collection接口中的toArray方法。
Object[] toArray()
返回包含此collection 中所有元素的数组。 这个变为数组以后返回object类型的数组,因为他没有泛型
a..,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。比如是new String[1]时这个数组的长度小于集合的大小,new String[1数组里面只能装一个元素,装不下集合的3个元素,那么他就创建一个新的数组长度是集合的大小
当指定类型的数组长度大于了集合的size,就不会新创建数组。而是使用传递进来的数组。比如newString[4]就有一个元素是null,集合只有3个元素,,放到newString[4]数组里面时有一个元素就为null,,newString[4]数组装完集合的3个元素后有2个位置是空的
所以创建一个刚刚好的数组最优。new String[al.size()]的长度等于集合的长度,,如果长度小于集合的大小那么内存中又多了个数组,因为他新创建了一个数组
b,数组变集合是为了用集合的方法,,,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。比如我自己创建了一个集合把集合给别人后,他可以增删,而我不需要对这个集合进行增删进行改变,对方只能查看我的集合不能改变,所以对方没有必要增删,所以我就这集合变成数组给你,,你只能进行查询,你不能增删,,,增删是我做的,那么我可以把集合变成数组再给他,那么他拿到的就是数组就不能进行增删了
- (19)集合工具类
- 集合工具类
- java集合工具类
- 集合工具类Collections
- JAVA_集合工具类
- 集合工具类总结
- 集合工具类Collections
- 集合工具类
- Collections集合工具类
- 集合工具类 Collections
- Java工具类集合
- JAVA-集合工具类
- java集合工具类
- 工具类集合
- android 工具类 集合
- 集合工具类
- #.Java集合工具类
- 集合工具类Colletions
- poj 3254 Corn Fields (状态压缩dp)
- (18)集合&map
- hdu 4217 线段树
- 使用Aspectj进行AOP开发
- Linux自启动设置详解
- (19)集合工具类
- 【Learning】Distributed System - Serialization
- Pythont特殊语法filter,map,reduce,apply
- (20)Io流字符流
- 广告费与业务宣传费的区别
- 【Learning】Java Date and Time
- 浅谈Struts2拦截器的原理与实现
- 在linux下设置开机自动启动程序的方法
- jQuery输入城市查看地图