/*练习15
//在将char数组放入list集合是遇到许多问题 于是有了如下思考
///1、由于数组的长度固定,在转换之后的list集合长度也是固定的,不能添加新元素
//如:
//Integer[] d=new Integer[]{4,5,6};
//List<Integer> list=Arrays.asList(d);
//list.add(7);运行时就会报错
//2、如果数组里面存放的基本数据类型,编译器认为只传了一个变量,这个变量的类型是int数组
// ,所以size为1,相当于是List中数组的个数
//Integer[] d=new Integer[]{4,5,6};
//List<Integer> list=Arrays.asList(d);
//list.size()为3
//int [] c=new int[]{1,2,3};
//List<Integer> list1=Arrays.asList(c);
//list1.size()为1
//3、尝试解决这个办法发现List<int[]> 运行通过 ,但是还是得不到想要的结果,于是有了如下的
//思考
//char[] 类型的输出的是什么 ?是一个char字符还是char数组?
//以下用int[] 与Integer[]来说明这个问题
// Integer[] d = new Integer[]{4, 5, 6};
// List<Integer> list = Arrays.asList(d);
// System.out.println(list.size());
// 输出为3
// int[] c = new int[]{4, 5, 6};
// List<int[]> list2 = Arrays.asList(c);
// System.out.println(list2.size());
// 输出为1 说明这样并未解决问题,只是声明了 容器中存放了一个存放这样基
// 本类型的数组并非是声明容器中存放的是这个数组中的每一个 基本类型数据
// 原因:例如int[] 仅仅代表是一个数组的包装类 因为对于数组来说无法再
// 将每一个int元素包装成Integer类 所以泛型会将int[] 看作一个整体
// 即 该泛型表示的是存放int基本数据的数组
//解决:
// 将这个int数组手动转换成Integer类的数组
// Integer[] c2 = new Integer[c.length];
// for(int i = 0;i<c.length;i++){
// c2[i] = c[i];
// }
// List<Integer> list3 = Arrays.asList(c2);
// System.out.println(list3.size());
// 输出3 成功!!!
//思考2:前面说到如果是List<int[]> list2 = Arrays.asList(c);这样的话是将int数组
// 作为泛型 即容器里元素的类型的 那么 他与List<Integer[]> 会有区别吗?
// 这里我们用char[] 与Character[]来讨论
//测试:
//
// List<Character> list = new ArrayList<>(Arrays.asList('q', 'c', 's', 'a'));
// System.out.println(list.size()); // 4
// char[] c1 = "asdasjdasjdad".toCharArray();
// Character[] c2 = new Character[c1.length];
// for (int i = 0; i < c1.length; i++) {
// c2[i] = c1[i];
// }
// List<Character[]> list1 = new ArrayList<>(Arrays.asList(c2));
// 截止到这里我们发现上一行编译错误这是为什么呢? 是因为List<Character[]>的原因吗?
// 于是我们又做了如下测试:
// System.out.println(list1.size());
// List<Character[]> list9 = new ArrayList<Character[]>();
// list9.add(c2);
// System.out.print(list9.size());//1
// 这里发现完全没没有问题,正如之前对List<Character[]>猜想的那样,于是我们可以判断
// 是Arrays.asList()方法的问题 经过查询得到如下资料:
// 关于Arrays.asList方法参数传递的问题:
// 通过列举方式传入基本数据类型和引用类型时,每一个参数都作为List的一个元素
// 当传入数组时,如果是引用类型的数组,则数组每个元素都作为List的一个元素;如果是
// 基本数据类型的数组,问题就来了,这个数组会整个被当作List的一个元素。
// 也就是说Arrays.asList(c2)中所有元素Character元素已经全部放入List中,此时List
// 集合中的每个元素为Character,而当我们在把这个list的每一个元素放入到新的list<Character>
// 集合中时,显然会发生错误。 测试如下:
// List<Character> list1 = new ArrayList<>(Arrays.asList(c2));
// System.out.println(list1.size());//13
// 测试成功,符合
// 而Arrays.asList(c)则是将c这个数组放入到list集合中,则这个list元素就是char[]
// 我们又将这个list集合中的元素放到一个新的list<Char[]>集合中,显然是可以的。测试
// 如下
// List<char[]> list3 = Arrays.asList(c1);
// System.out.println(list3.size());// 1
// 测试成功,符合
public static void main(String[] args) {
Stack<Character> s = new Stack<Character>();
String a = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+-+r+u--+l+e+s---";
char[] o = a.toCharArray();
Character[] c = new Character[o.length];
for (int p = 0; p < o.length; p++) {
c[p] = o[p];
}
List<Character> list = new ArrayList(Arrays.asList(c));
//
//以下方法无法使用,因为对于增强for而言你无法手动操作下个元素
// for (Character c : o) {
// if (c.equals("+")) {
// s.push(c);66+-
// }
// if (c.equals("-")) {
// System.out.print(s.pop());
// }
ListIterator<Character> i = list.listIterator();
while (i.hasNext()) {
Character e = i.next();
if (e.equals('+')){
s.push(i.next());
} else if (e.equals('-')) {
System.out.print(s.pop());
}
}
}
*/
//在将char数组放入list集合是遇到许多问题 于是有了如下思考
///1、由于数组的长度固定,在转换之后的list集合长度也是固定的,不能添加新元素
//如:
//Integer[] d=new Integer[]{4,5,6};
//List<Integer> list=Arrays.asList(d);
//list.add(7);运行时就会报错
//2、如果数组里面存放的基本数据类型,编译器认为只传了一个变量,这个变量的类型是int数组
// ,所以size为1,相当于是List中数组的个数
//Integer[] d=new Integer[]{4,5,6};
//List<Integer> list=Arrays.asList(d);
//list.size()为3
//int [] c=new int[]{1,2,3};
//List<Integer> list1=Arrays.asList(c);
//list1.size()为1
//3、尝试解决这个办法发现List<int[]> 运行通过 ,但是还是得不到想要的结果,于是有了如下的
//思考
//char[] 类型的输出的是什么 ?是一个char字符还是char数组?
//以下用int[] 与Integer[]来说明这个问题
// Integer[] d = new Integer[]{4, 5, 6};
// List<Integer> list = Arrays.asList(d);
// System.out.println(list.size());
// 输出为3
// int[] c = new int[]{4, 5, 6};
// List<int[]> list2 = Arrays.asList(c);
// System.out.println(list2.size());
// 输出为1 说明这样并未解决问题,只是声明了 容器中存放了一个存放这样基
// 本类型的数组并非是声明容器中存放的是这个数组中的每一个 基本类型数据
// 原因:例如int[] 仅仅代表是一个数组的包装类 因为对于数组来说无法再
// 将每一个int元素包装成Integer类 所以泛型会将int[] 看作一个整体
// 即 该泛型表示的是存放int基本数据的数组
//解决:
// 将这个int数组手动转换成Integer类的数组
// Integer[] c2 = new Integer[c.length];
// for(int i = 0;i<c.length;i++){
// c2[i] = c[i];
// }
// List<Integer> list3 = Arrays.asList(c2);
// System.out.println(list3.size());
// 输出3 成功!!!
//思考2:前面说到如果是List<int[]> list2 = Arrays.asList(c);这样的话是将int数组
// 作为泛型 即容器里元素的类型的 那么 他与List<Integer[]> 会有区别吗?
// 这里我们用char[] 与Character[]来讨论
//测试:
//
// List<Character> list = new ArrayList<>(Arrays.asList('q', 'c', 's', 'a'));
// System.out.println(list.size()); // 4
// char[] c1 = "asdasjdasjdad".toCharArray();
// Character[] c2 = new Character[c1.length];
// for (int i = 0; i < c1.length; i++) {
// c2[i] = c1[i];
// }
// List<Character[]> list1 = new ArrayList<>(Arrays.asList(c2));
// 截止到这里我们发现上一行编译错误这是为什么呢? 是因为List<Character[]>的原因吗?
// 于是我们又做了如下测试:
// System.out.println(list1.size());
// List<Character[]> list9 = new ArrayList<Character[]>();
// list9.add(c2);
// System.out.print(list9.size());//1
// 这里发现完全没没有问题,正如之前对List<Character[]>猜想的那样,于是我们可以判断
// 是Arrays.asList()方法的问题 经过查询得到如下资料:
// 关于Arrays.asList方法参数传递的问题:
// 通过列举方式传入基本数据类型和引用类型时,每一个参数都作为List的一个元素
// 当传入数组时,如果是引用类型的数组,则数组每个元素都作为List的一个元素;如果是
// 基本数据类型的数组,问题就来了,这个数组会整个被当作List的一个元素。
// 也就是说Arrays.asList(c2)中所有元素Character元素已经全部放入List中,此时List
// 集合中的每个元素为Character,而当我们在把这个list的每一个元素放入到新的list<Character>
// 集合中时,显然会发生错误。 测试如下:
// List<Character> list1 = new ArrayList<>(Arrays.asList(c2));
// System.out.println(list1.size());//13
// 测试成功,符合
// 而Arrays.asList(c)则是将c这个数组放入到list集合中,则这个list元素就是char[]
// 我们又将这个list集合中的元素放到一个新的list<Char[]>集合中,显然是可以的。测试
// 如下
// List<char[]> list3 = Arrays.asList(c1);
// System.out.println(list3.size());// 1
// 测试成功,符合
public static void main(String[] args) {
Stack<Character> s = new Stack<Character>();
String a = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+-+r+u--+l+e+s---";
char[] o = a.toCharArray();
Character[] c = new Character[o.length];
for (int p = 0; p < o.length; p++) {
c[p] = o[p];
}
List<Character> list = new ArrayList(Arrays.asList(c));
//
//以下方法无法使用,因为对于增强for而言你无法手动操作下个元素
// for (Character c : o) {
// if (c.equals("+")) {
// s.push(c);66+-
// }
// if (c.equals("-")) {
// System.out.print(s.pop());
// }
ListIterator<Character> i = list.listIterator();
while (i.hasNext()) {
Character e = i.next();
if (e.equals('+')){
s.push(i.next());
} else if (e.equals('-')) {
System.out.print(s.pop());
}
}
}
*/