Java中的数组与容器的概念与彼此转换
1、数组与容器的基本概念数组是Java提供的线性队列实现方式,能存储基础数据类型与对象;容器是封装的更高级集合实现,底层可能是数组也可能是链表,但容器只能存对象,不能存基础类型。容器间的关系图:2,List、Set、Map 转换成数组(高级实现转换成基础承载对象的数组)import java.util.*;public class TestCollection{public st
·
1、数组与容器的基本概念
- 数组是Java提供的线性队列实现方式,能存储基础数据类型与对象;
- 容器是封装的更高级集合实现,底层可能是数组也可能是链表,但容器只能存对象,不能存基础类型。
容器间的关系图:
2,List、Set、Map 转换成数组(高级实现转换成基础承载对象的数组)
import java.util.*;
public class TestCollection{
public static void main(String args[]) {
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 10; i++) {
list.add(i);
}
//List转数组,实现1
//toArrya()方法的返回类型为Object数组
Object[] array1 = list.toArray();
System.out.println(Arrays.toString(array1));
//List转数组,实现2
Integer[] array2 = list.toArray(new Integer[0]);
System.out.println(Arrays.toString(array2));
//List转数组,实现3
Integer[] array3 = new Integer[list.size()];
list.toArray(array3);
System.out.println(Arrays.toString(array3));
}
}
打印结果是
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
如果想将List Integer转换成int[],最好的方式是遍历这个容器,因为List Integer最多只能转换成 Integer[],以下是将List Integer转换成int[]的示例代码
int[] result = new int[list.size()]
for(int i=0;i<list.size();i++){
result[i] = list.get(i);
}
2、上面讲了List转数组,其实Map和Set转数组也是一样的方法,因为都是Collection的实现,也给个Demo:
import java.util.*;
public class TestCollection{
public static void main(String args[]) {
//Set
Set<Integer> set = new HashSet<>();
for(int i = 0; i < 10; i++) {
set.add(i);
}
Integer[] array1 = new Integer[set.size()];
set.toArray(array1);
System.out.println(Arrays.toString(array1));
//Map
Map<Integer, String> map = new HashMap<>();
for(int i = 0; i < 10; i++) {
map.put(1, "hello");
map.put(2, "world");
map.put(3, "!");
}
//Map 的Key转换成数组
Integer[] keys = new Integer[map.size()];
map.keySet().toArray(keys);
System.out.println(Arrays.toString(keys));
//Map 的Value转换成数组
String[] values = new String[map.size()];
map.values().toArray(values);
System.out.println(Arrays.toString(values));
}
}
3, 数组转List、Set,由于数组是基础数据格式,没有封装转换成其他容器的方法,故需借助工具Arrays
import java.util.*;
public class TestCollection{
public static void main(String args[]) {
Integer[] array = new Integer[10];
for(int i = 0; i < 10; i++) {
array[i] = i;
}
//数组转List
List<Integer> list = Arrays.asList(array);
System.out.println(list);
//数组转Set,先转长List,再转成集合,这里也包含List转Set的方法哦
Set<Integer> set = new HashSet(Arrays.asList(array));
}
}
4、List与Set之间的转换
import java.util.*;
public class TestCollection{
public static void main(String args[]) {
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 10; i ++) {
list.add(i);
}
//List 转Set
Set<Integer> set = new HashSet<>(list);
System.out.println(set);
//Set转List
List<Integer> list2 = new ArrayList<>(set);
System.out.println(list2);
}
}
这里有一道题目,给定一个数组[2,10,3,29,10,22]基于Java删除里面重复数据的一个算法
最简单的实现方式
Integer[] init = {2,3,4,2,3,1,2,3,5,6};
Set<Integer> result = new HashSet<>(Arrays.toList(array));
System.err.println(Arrays.toString(set.toArray()));
打印结果:
[1, 2, 3, 4, 5, 6]
如果想了解容器之间的相互转换,出门左走找【java8-stream】
更多推荐
已为社区贡献4条内容
所有评论(0)