最方便的是使用lamdba表达式输出:
List<String> list = new ArrayList<>();
list.add("我");
list.add("是");
list.add("你");
list.add("爸爸");
sout(list);//只能输出
//下面这个能对每个元素进行操作
list.forEach(data -> System.out.print(data + " ")); //我 是 你 爸爸
list.forEach(System.out::println)); //一样的效果,括号里面打sout即可
对set也是类似的
set
jedis.sadd("set的key","set的val1","set的val2","set的val3");
Set<String> setVals = jedis.smembers("set的key");
setVals.forEach(System.out::println); //set的val3 set的val2 set的val1
//也可以使用迭代器
for (Iterator iterator = setVals.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string);
}
User user1 = new User(1001, "admin1", "123456", 20, "男");
User user2 = new User(1002, "admin2", "123456", 20, "男");
User user3 = new User(1003, "admin3", "123456", 20, "男");
List<User> list = Arrays.asList(user1, user2, user3);
注意:该方法必须是包装类(String、Integer、Character等),不能是基本数据类型了(string、int、char);也可以直接遍历list来输出为数组
使用list.toArray()返回是Object的数组,需要强转一下
在算法题中,由于数组创建需要初始化,而初始化容量往往不确定,另外添加元素必须指定下标添加,这都带来了麻烦。经常的做法就是:使用 list集合例如:List
需要添加元素的时候直接add()即可。最后题目需要返回值为数组类型的,直接调用库函数返回即可!
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(13);
list.add(16);
list.add(8);
Integer[] array = list.toArray(new Integer[list.size()]);
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
int size=list.size();
String[] array = (String[])list.toArray(new String[size]);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
//二维数组:
//下面就是典型的利用LinkedList集合的各种好用的方法操作数组,最后再转化为数组进行输出
LinkedList<int[]> que = new LinkedList<>();
int[][] people = {{7,0},{4,4},{7,1},{5,0},{6,1},{5,2}};
for (int[] p : people) {
que.add(p[1],p);
}
return que.toArray(new int[people.length][]);
byte[] bytes2 = {1,2,3,-5,-6,-7};
System.out.println(Arrays.toString(bytes2));//[1, 2, 3, -5, -6, -7]
注:另外,复习一个方法:
Arrays.sort(int[] a);
快速将一个数组进行排序,并覆盖原数组。
注:如果想把数组转为一个字符串输出怎么办?----使用构造方法 new String(int[] arrs)
int[][] ins = {{1,2,3},{4,5,6},{7,8,9,}};
for (int[] data : ins){//ins看作多个一维数组
System.out.println(Arrays.toString(data));
}
输出:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
下面的例子,people可以看作一个一维数组,数组中的每个元素也是一维数组,实现接口后,指定使用每个元素o1/o2的具体里面那个值进行比较。
int[][] people = {{7,0},{4,4},{7,1},{5,0},{6,1},{5,2}};
Arrays.sort(people, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) return o1[1] - o2[1];//如果想让h相同k小的站前面,多这一行!
return o2[0]-o1[0];//o1本来就已经是数组中的每个元素,再o1[]就是该元素内部的东西再指定一次
}
});
//输出
for(int[] data : people){
System.out.println(Arrays.toString(data));
}
输出结果:
[7, 0]
[7, 1]
[6, 1]
[5, 0]
[5, 2]
[4, 4]
public void testAlgo1() {
Integer[] arrays = {1, 5, -4, 0, 3, -1};
Arrays.sort(arrays, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println(Arrays.toString(arrays));
}
对于map集合通常既想要key,也想要value,最经常用的简洁输出语句是使用Map.Entry
Map.entrySet() 这个方法返回的是一个Set
下图是Map集合转换成Set集合entrySet()方法的图解
Map<Byte,String> map = new HashMap<>();
map.put((byte) '1',"我");
map.put((byte) '2',"是");
map.put((byte) '3',"你");
map.put((byte) '4',"爸爸");
//遍历
for (Map.Entry<Byte,String> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + " | value = " + entry.getValue());
}
/*
* key = 49 | value = 我
* key = 50 | value = 是
* key = 51 | value = 你
* key = 52 | value = 爸爸
*/