如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里
本博主要是相理清楚一些转换的逻辑,顺便总结一下贴出来。这里是把一些可以JDK自带的使用方法写出了。不代表没有其他的转换方式。
只要跟集合交流的数组都是引用类型的数组。因为集合本身不与基本类型打交道。如果你要交流,他们的包装类型就是交流的桥梁。而包装类型和基本类型数组之间的转换就要你自己写循环体去一个一个转型了。
String转换为char[]的一种方法:
public static void stringToChar(String str){
char
[] chars1 = str.toCharArray(); //通过toCharArray方法
}
toCharArray()的源码:
public
char
[] toCharArray() {
// Cannot use
Arrays
.copyOf because of class
initialization
order issues
char
result[] = new
char
[value.length]; //构造返回的char[]变量
System.arraycopy(value, 0, result, 0, value.length);
//通过arraycopy将String的value值拷贝到result上,返回result
return result;
}
char[]数组转换为String的两种现有方法:
public static void charToString(){
char
[] chars = {'1','2','3','4','5','6'};
String str1 = new String(chars); //通过String构造函数
String str2 = String.valueOf(chars); //通过String类型转换,实际也是new String(char[])
}
第一种构造函数的源码:
public String(
char
value[]) {
this.value = Arrays.copyOf(value, value.length);
//深拷贝一个新的char[]数组给String的value(对于基本类型而言都是深拷贝)
}
第二种String.valueOf()的源码:
public static String valueOf(
char
data[]) {
return new String(data); //实际上还是String的构造函数
}
public static void arrayToList(){
Character[] chars = {'1','2','3','4','5','6','7','8','9'};
//方式一
List<Character> list1 = Arrays.asList(chars); //通过Arrays的工具类
//方式二
List<Character> list2 = new ArrayList<>(); //通过Collections工具类
Collections.addAll(list2,chars);
}
Arrays工具类的源码:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a); //返回Arrays类内部的静态内部类ArrayList实例对象
}
Collections.addAll工具类的源码:
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements) //通过遍历数组
result |= c.add(element); //每次都把数组插入到集合c中
return result;
}
List转换为包装类数组的一种方式:
public static void listToArray(){
List<Character> list = new ArrayList<>();
list.add('1');
list.add('2');
Character[] chars = list.toArray(new Character[list.size()]);//注意toArray()的参数
}
关于源码的实现,就要具体看是那种List了,从List接口中,我们也能知道一些信息
<T> T[] toArray(T[] a); //参数是什么类型就返回什么类型的数组
注意:
我们这里特地强调了是List和包装类数组之间的转换。因为集合只支持对包装类进行操作。
所以你如过要进行基本类型数组和List之间的转换,比如char[]转换为List,要先转换成它的包装类型数组Character[]
String转换为List的两种方式:
//原理就是首先将String转换成String[]数组,再通过工具类转换为List
public static void stringToList (String str){
String str1 = "123456";
//方式一
List<String>list1 = Arrays.asList(str.split("")); //str.split()返回一个String[]数组
//方式二
List<String>list2 = new ArrayList<>();
Collections.addAll(list2, str.split(""));
}
所以有两个步骤是
注意
要注意的是,通常所说的String转换成List,方式之一通常是通过split方法转换成String[]数组。
如果你想将String.toArrayChar转换成char[],再转换为List,这就比较麻烦了,首先你先得把char[]基本类型转换成Character[]
List转换为String的一种方式:
public static void listToString(){
List<String> list = Arrays.asList("1","2","3","4");
String str = String.join("", list); //"1234"
}
List通过String的join方法直接转换为String,通过""
作为分隔符,就相当于字符之间没有分隔符
public static void listToSet(){
List<String> list = new ArrayList<>();
Set<String> set = new HashSet<>(list); //直接构造函数即可
}
public static void setToList(){
Set<String> set = new HashSet<>();
List<String> list = new ArrayList<>(set); //直接构造函数即可
}
所以List集合和Set集合之间只要类型参数相同,既可以通过构造函数互相转换
public static void stringToSet(){
String str = "12345";
String[] strs= str.split("");
//方式一
List<String> list1 = Arrays.asList(strs);
Set<String> set1 = new HashSet<>(list1);
//方式二
Set<String> set2 = new HashSet<>();
Collections.addAll(set2, strs);
}
方式一有三个步骤:
方式二有两个步骤
public static void setToString(){
Set<String> set = new HashSet<>();
String.join("", set);
}
只需要一个步骤,即
public static void arrayToSet(){
Character[] chars = {'1','2','3','4'};
//方式一
List<Character> list = Arrays.asList(chars);
Set<Character> set12 = new HashSet<>(list);
//方式二
Set<Character> set1 = new HashSet<>();
Collections.addAll(set1, chars);
}
两种方式,同样是受到不同工具类的影响
第一种方式的两个步骤:
第二种方式的一个步骤:
public static void setToArray(){
Set<Character> set = new HashSet<>();
Character[] chars = set.toArray(new Character[set.size()]);
}
集合转为数组的方式也很简单,通常都是集合.toArray(T[] t)