Java基础 Collections Arrays 增强for循环 可变参数
2015-06-17 14:09
519 查看
Collections
java.util.Collections此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。
示例代码
import java.util.*; class CollectionsDemo { public static void main(String[] args) { ArrayList<Integer> ilist=new ArrayList<Integer>(); ilist.add(1); ilist.add(3); ilist.add(9); ilist.add(2); ilist.add(4); //fillDemo(ilist,1,3,0); //System.out.println(ilist); replaceAllDemo(); } public static void replaceAllDemo() { ArrayList<Integer> ilist=new ArrayList<Integer>(); ilist.add(1); ilist.add(3); ilist.add(9); ilist.add(9); ilist.add(4); Collections.replaceAll(ilist,9,0); System.out.println(ilist); } public static <T> void fillDemo(ArrayList<T> list,int start,int end,T t) { List<T> sublist=list.subList(start,end); Collections.fill(sublist,t); } public static void binarySearceDemo() { ArrayList<Integer> ilist=new ArrayList<Integer>(); ilist.add(1); ilist.add(3); ilist.add(9); ilist.add(2); ilist.add(4); MyComparator cmp=new MyComparator(); Collections.sort(ilist,cmp); int index=Collections.binarySearch(ilist,5); System.out.println(ilist+"index:"+index); } public static void maxDemo() { ArrayList<Integer> ilist=new ArrayList<Integer>(); ilist.add(1); ilist.add(3); ilist.add(9); ilist.add(2); ilist.add(4); MyComparator cmp=new MyComparator(); System.out.println(Collections.max(ilist)); Collections.sort(ilist,cmp); System.out.println(ilist); } } class MyComparator implements Comparator<Integer> { public int compare(Integer i1,Integer i2) { int num=i1.compareTo(i2); return num; } }
搜索 binarySearch
static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象。
逆转顺序
static void reverse(List<?> list) 反转指定列表中元素的顺序。 static <T> Comparator<T> reverseOrder() 返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 static <T> Comparator<T> reverseOrder(Comparator<T> cmp) 返回一个比较器,它强行逆转指定比较器的顺序。
元素位置交换swap
static void swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素。
获取线程安全的集合
static <T> Collection<T> synchronizedCollection(Collection<T> c) 返回指定 collection 支持的同步(线程安全的)collection。 static <T> List<T> synchronizedList(List<T> list) 返回指定列表支持的同步(线程安全的)列表。 static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步(线程安全的)映射。 static <T> Set<T> synchronizedSet(Set<T> s) 返回指定 set 支持的同步(线程安全的)set。
shuffle随机调整List元素位置
static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
Arrays 用于操作数组的工具类
里面都是静态方法asList:将数组变成List集合
如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
可以用asList获取数组的List对象
不能对list进行 增,删,操作
可以使用其他操作。
contains()
get
set
indexOf
subList
因为数组长度是固定的。
public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。 此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素: List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
import java.util.*; class ArraysDemo { public static void main(String[] args) { //String[] strArr={"abc","def","ghi"}; Integer[] intArr={1,2,3}; //List<String> list=Arrays.asList(strArr); List<Integer> list=Arrays.asList(intArr); //list.set(1); System.out.println(list.get(0)); } }
集合转成数组
toArray
import java.util.*; class CollectionToArray { public static void main(String[] args) { ArrayList<String> alist=new ArrayList<String>(); alist.add("abc1"); alist.add("abc2"); alist.add("abc3"); /* 1.指定类型的数组长度 指定类型的数组长度小于了集合的size,那么方法内部会创建一个 新的数组长度为集合的size 当指定类型的数组长度大于了集合的size,就不会新创建数组,而是使用传递进来的数组 所以创建一个刚刚好的数组最优。 2.为什么要集合变数组 为了限定对元素的操作。 */ String sArr[]=new String[alist.size()]; String[] arr=alist.toArray(sArr); System.out.println(Arrays.toString(arr)); } }
增强for 循环
对集合进行遍历。只能获取集合元素,不能对集合进行操作
迭代器除了遍历,还能remove集合中元素的动作。
如果使用ListIterator还可以在遍历过程中进行增删改查的动作。
传统for和高级for有什么区别呢?
高级for有一个局限性,必须有被遍历的目标.
建议在遍历数组的时候,使用传统for,因为传统for可以定义角标。
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组) { }
示例代码:
import java.util.*; class ForEachDemo { public static void main(String[] args) { ArrayList<String> alist=new ArrayList<String>(); alist.add("abc1"); alist.add("abc2"); alist.add("abc3"); for(String s:alist) { System.out.println(s); } /* Iterator<String> it=alist.iterator(); while(it.hasNext()) { System.out.println(it.next()); } */ int[] arr={2,3,4}; for(int i : arr) { System.out.println("i:"+i); } HashMap<Integer,String> hm=new HashMap<Integer,String>(); hm.put(1,"abc1"); hm.put(2,"abc2"); for(Integer i : hm.keySet()) { System.out.println("K:"+i+" V:"+hm.get(i)); } //Set<Map.Entry<Integer,String>> entrySet=hm.entrySet(); for(Map.Entry<Integer,String> me:hm.entrySet()) { System.out.println(me.getKey()+"---"+me.getValue()); } } }
可变参数
使用3个点函数(类型… 变量名)
import java.util.*; /* JDK1.5版本出现的新特性 方法的可变参数 使用时注意:可变参数一定要定义在参数列表的最后面。 */ class ParamMethodDemo { public static void main(String[] args) { //show(3,4); /* int[] arr={3,4}; show(arr); 虽然少定义了多个方法,但是每次都要定义一个数组.作为实际参数. int[] arr1={2,3,4,5}; */ /* 可变参数 其实就是上一种数组参数的简写形式。 不用每一次都手动的建立数组对象。 只要将要操作的元素作为参数传递即可。 隐式的将这些参数封装成了数组。 */ show(2,3,2,2); show2("test",2,3,4); } public static void show2(String s,int... arr) { System.out.println(s); for(int i : arr) System.out.println(i); } public static void show(int... arr)//第三种方法,可变参数 { //自动封装int型数组arr for(int i : arr) System.out.println(i); } /* public static void show(int[] arr)//第二种方法传递数组 { } public static void show(int a,int b)//第一种方法,写多个重载函数 { System.out.println(a+","+b); } */ }
静态导入 StaticImport
import java.util.*; /* JDK1.5版本出现的新特性 当类名重名时,需要指定具体的包名 当方法重名时,需要指定具体所属的对象或者类。 */ import static java.util.Arrays.*;//导入Arrays这个类中的静态成员. import static java.lang.System.*; class StaticImport extends Object { public static void main(String[] args) { out.println("test"); int[] arr={3,1,5}; sort(arr); int index = binarySearch(arr,1); System.out.println("Index="+index); System.out.println(Arrays.toString(arr));//toString方法重名 } }
相关文章推荐
- eclipse如何修改dynamic web module version
- Java NIO系列教程(十) Java NIO DatagramChannel
- Java: |(或运算) 与 多选判断
- Eclipse搜索快捷键
- jsrsasign 前台签名,Java后台验证前台签名
- Java: 在dos窗口输入密码,不要把密码直接显示出来,原来可以这么简单
- spring定时器quartz
- JavaWeb学习总结第五篇--认识Cookie机制
- eclipse打开选中文件(文件夹,包)的当前目录
- 解决Myeclipse/eclipse控制台输出乱码的问题
- Java: String.split(....); 结果很意外
- 路径或文件名中含有中文的jar文件双击启动不了 -> Java7的Bug?
- 解决Java Web项目中文乱码的方法
- 中科院NLPIR中文分词java版
- java注释
- code::Blocks生成的dll 在 java jni 调用遇到的问题
- 随笔:spring+quartz定时任务(1)
- 由于对必需的库\jdk1.7.0\jre\lib\rt.jar 具有一定的访问限制问题 解决方法
- Hashtable 删除元素, 抛出异常 java.util.ConcurrentModificationException
- 三大框架(SSH)关于URL转发乱码问题(最简单暴力的一种解决办法)