Arrays工具的使用
集合 和数组 的互转
java中的foreach
asList()
toArray()
集合 和数组 的互转
java中的foreach
asList()
toArray()
package com.itheima.day17;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Arrays:用于操作数组的工具类.
* 里面都是静态方法.
* asList: 将数组编程list集合
*/
public class ArraysDemo {
public static void main(String[] args) {
System.out.println("======数组 转换成 集合=====");
method_1();
System.out.println("======集合 转换成 数组 =====");
method();
System.out.println("======for循环增强=====");
forEachDemo();
}
/**
* 高级for循环
* 格式:
* for(数据类型 变量名 : 被遍历的集合(Collection)或者 数组 )
* {
*
* }
* 对集合进行遍历只能获取元素,不能对集合进行操作.
*
* 迭代器Iterator:处理遍历,还可以进想remove的动作
* 如果使用ListIterator,还可以在遍历过程中 对集合进行 增删改查 的操作.
*
* 传统for 和高级 for 有什么区别?
* 高级for有一个局限性,鼻息有被遍历的目标.
*/
public static void forEachDemo(){ //JDK1.5 中 增加订单 for循环增强
ArrayList<String> list =new ArrayList<String>();
list.add("aaa");
list.add("bbbb");
list.add("ccc");
list.add("dddd");
Iterator<String> it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//for 遍历集合
for (String s : list) {
System.out.println(s);
}
//遍历数组
int[] arr={3,4,5,8,7};
for(int i:arr){
System.out.println("i"+i);
}
//传统for 和高级 for有什么区别
//将 Helloworld 输出100次这样就只能使用传统 for
//建议 在遍历数组的时候 ,还是希望使用传统的for,因为传统for在遍历的时候有脚标.
for(int x=0;x<arr.length;x++){
if(x%2==0) //只打印 偶数下标
System.out.println(arr[x]);
}
//遍历 HashMap
HashMap<Integer,String> hm=new HashMap<Integer,String>();
hm.put(1, "adfs");
hm.put(2, "sfd");
hm.put(3, "dfsd");
//遍历 map的key
for(Integer key:hm.keySet()){
System.out.println(key);
}
for(Map.Entry<Integer, String> me:hm.entrySet()){
System.out.println(me.getKey()+"----"+me.getValue());
}
}
/**
* Collection接口中的toArray()方法.
*
* 1.制定类型的数组到底要定义多长呢?
* 当指定的类型的数组长度小于集合的size,那么该方法内部化会创建一个新的数据,长度为集合的size
* 当指定的类型的数组长度大于集合的size,就不会创建新的数组.而是使用传递进来的数组.
* 所以创建一个刚刚好的数组最优.
*
* 2.为什么要将集合变数组?
* 当为了将集合中固定点元素返回给调用者的时候,为了限定调用者不对元素的操作.
*
* 为了限定对元素的操作,不需要外界对集合进行增删.
*/
public static void method(){
ArrayList<String> list =new ArrayList<String>();
list.add("aaa");
list.add("bbbb");
list.add("ccc");
list.add("dddd");
String[] arr=list.toArray(new String[0]);
System.out.println(Arrays.toString(arr));
String[] arr1=list.toArray(new String[8]);
System.out.println(Arrays.toString(arr1));
//最优
String[] arr2=list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr2));
}
public static void method_1(){
/** asList
* 如果数组中的元素 都是对象,变成集合时候,数组中的元素就直接转成集合中的元素
* 如果数组中的元素 都是基本数据类型,那么会 将该数组作为集合中的元素存在.
*/
int[] arr={3,4,5}; //基本数据类型
System.out.println(Arrays.toString(arr));//[3, 4, 5]
List<int[]> list1=Arrays.asList(arr);
System.out.println(list1);
Integer[] arri={3,4,5}; //对象
List<Integer> lis2=Arrays.asList(arri);
System.out.println(lis2);
/**
* 将数组变成 List 集合的好处 ?
* 可以是用 集合的思想和 方法来操作数组中的元素.
* 注意 :将数组变成集合 后 ,不可以使用集合的增删方法 ,因为数组的长度固定的
* contains
* get
* indexOf()
* subList()
* 如果增删,会发生不支持的操作异常.UnsupportedOperationException
*/
String[] arrs={"ab","acb","sbd","sdfsd"};
List<String> list=Arrays.asList(arrs);
System.out.println(list);//[ab, acb, sbd, sdfsd]
//list.add("DD");// 会发生 不支持的操作异常
}
}