黑马程序员——集合Collections,集合Arrays
来源:互联网 发布:Ubuntu 自动获取ip 编辑:程序博客网 时间:2024/05/16 09:31
------ >Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Collections是集合框架的工具类,提到它马上会想到以前学过的Collection,上网查找有关资料,看到了前辈总结的两者区别:
1. java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
2. java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
工具类collections用于操作集合类,如List,Set,常用方法有:
1.排序 Sort
使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的。
2.返回Collections中最大元素 Max
根据指定比较器产生的顺序,返回给定 collection 的最大元素。collection中的所有元素都必须是通过指定比较器可相互比较的。
3.混排 Collections.shuffli()
混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该List,这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的Card 对象的一个 List .另外,在生成测试案例时,它也是十分有用的。
4.反转 Reverse
使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排序。
5.替换所有的元素 Fill
使用指定元素替换指定列表中的所有元素。
6.反向排序 Collections.reverseOrder()
返回一个比较器,强行逆转实现了comparable接口的对象Collection的自然顺序,也可强行逆转指定比较器的顺序
让非同步方法变为同步的。
Arrays是用于操作数组的工具类,里面都是静态方法,其中一个比较重要的方法:asList() 将数组变成List集合:
List<String> list = Arrays.asList(arr); 功能:把数组arr变成集合list,
这样做的好处:可以使用集合的思想和方法来操作数组中元素,但是将数组变成集合,不可以使用集合中的增删方法,因为素组长度固定,如果增删,会发生UnsupportedOperationExcepption。
将集合变数组,需用Collection接口中的toArray方法
将集合变数组的原因:为了限定对元素的操作,不需要进行增删。有一个问题需要考虑,就是指定类型的数组到底要定义多长?
当指定类型的数组长度length小于集合的长度size,该方法内部会创建一个新的数组,长度为集合的size,当指定类型的数组长度大于集合的长度,就不会创建新数组,而是使用传递进来的数组所以创建一个长度刚好的数组最优。代码如下:
import java.util.*;class CollectionToArray{public static void main(String[] args) {ArrayList<String> al=new ArrayList<String>(); al.add("acd1"); al.add("acd2"); al.add("acd3"); String[] arr=al.toArray(new String[al.size()]); //定义只能存放字符串的数组 System.out.println(Arrays.toString(arr)); // 数组转为字符串方便打印}}
高级for循环,格式:
for(数据类型 变量名:被遍历的集合(Collection)或者数组 )
{
}
特点:对集合进行遍历。只能获取元素,但不能对集合操作。迭代器除了遍历,还可以进行remove集合中元素的动作。如果使用ListIterator,还可以在遍历过程中对集合进行增删改查的动作.
传统for和高级for有什么区别?
高级for有一个局限性,必须有被遍历的目标,建议在遍历数组时候,还是希望用传统for,因为传统for可以定义角标。
import java.util.*;class ForEnceDemo {public static void main(String[] args) {ArrayList<String> al=new ArrayList<String>(); al.add("acd1"); al.add("acd2"); al.add("acd3");for (String s:al ){System.out.println(s);} int[] arr={2,5,6,7}; //数组中for的使用 for (int i=0;i<arr.length ;i++ ) //传统for { System.out.println(arr[i]); } for (int i:arr ) //高级for { System.out.println("i:"+i); }HashMap<Integer,String> hm = new HashMap<Integer,String>();hm.put(1,"a");hm.put(2,"b");hm.put(3,"c");Set<Integer> keySet=hm.keySet();//HashMap的第一种取出方式for (Integer i:keySet ){System.out.println(i+":"+hm.get(i));}Set<Map.Entry<Integer,String>> entrySet = hm.entrySet();for ( Map.Entry<Integer,String> me: entrySet ){System.out.println(me.getKey()+"----"+me.getValue());}}}
JDK1.5版本出现的新特性:
方法的可变参数,使用时注意:可变参数一定要定义在参数列表的最后面,可变参数,实际上是一种数组参数的简写形式,不用每一次都手动建立数组对象,只要将要操作的元素作为参数传递即可,隐式将这些参数封装成了数组。
class ParaMethodDemo {public static void main(String[] args) {show("xioabai",1,2,3);}public static void show(String str, int...arr){System.out.println(arr.length);}}StaticImport 静态导入,可以编写代码时更简洁方便,当类名重名时,需要指定具体的包名,当方法重名时,需指定方法所属的对象或者类名。
import java.util.*; //导入util中的所有类import static java.util.Arrays.*; //导入的是Arrays这个类中的所有静态成员import static java.lang.System.*; //导入了System类中所有静态成员class StaticImport {public static void main(String[] args) {int[] arr={8,3,6,5};sort(arr); // 有了静态导入,书写更简洁,若没有静态导入,应为:Arrays.sort(arr);System.out.println( Arrays.toString(arr)); //System.out.println(Arrays.toString(arr));int index=Arrays.binarySearch(arr,6);out.println("index:"+ index); //System.out.printin("index:"+ index);}}
- 黑马程序员——集合Collections,集合Arrays
- 黑马程序员——集合(二)--Collections、Arrays、泛型
- 黑马程序员——集合框架类(Collections、Arrays)
- 黑马程序员—collections集合
- 黑马程序员—collections集合
- 集合—Collections、Arrays
- 黑马程序员——集合、集合框架工具类(collections和Arrays)和其他对象
- 黑马程序员--集合框架(map集合,Collections,Arrays)
- 黑马程序员——JAVA笔记——集合框架5——Collections、Arrays
- 黑马程序员——集合——泛型、Collections和Arrays
- 黑马程序员———集合(下)[包含Collections和Arrays类]
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——Java基础--集合框架工具类:Collections、Arrays、其他对象
- 黑马程序员——JAVA基础之Collections和Arrays,数组集合的转换
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——Java基础---集合<二>Map,Arrays,Collections
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——Java语言基础:集合框架(Collection、Map,工具类Collections、Arrays)
- 3-21(学生成绩最高分,及格人数,平均分)
- 取反 Single Number
- IDEA Error:java: 未结束的字符串文字
- 为何要fork()两次来避免产生僵尸进程?
- System.arraycopy方法的使用
- 黑马程序员——集合Collections,集合Arrays
- 修改lua的文件加载器,自定义lua文件加载
- Sql中的set和select赋值方式的区别?
- 获取Application的context
- 你做过的最有效的提高编程水平的一件事情是什么?
- multiset容器使用上的一些疑问
- 面试笔记2
- Eclipse常用快捷键及技巧总结
- Android 开发规范