关于将char[]数组中的每个元素加入到集合中的练习以及遇到的问题

/*练习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());
            }
        }
    }
     */
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值