A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始







6、集合

6.1 常用对象

    6.1.2 基本数据类型对象包装类
    为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。
    用于描述该对象的类就称为基本数据类型对象包装类。
    byte       Byte
    short      Short
    int          Integer
    long       Long
    float       Float
    double   Double
    char       Character
    boolean Boolean


    该包装对象主要用于基本类型和字符串之间的转换
    基本类型-->字符串
    1. 基本类型数值+""
    2. 用String类中的静态方法valueOf(基本类型数值);

    字符串-->基本类型
    1. 使用包装类中的静态方法xxx parseXxx("xxx");
        int parseInt(String str);
        long parseLong(String str);
        boolean parseBoolean(String str);
        只有Character没有parse方法。
    2. 如果字符串被Integer进行对象的封装,可使用另一个非静态的方法,intValue。
        将一个Integer对象转成基本数据类型值。
    3. 用Integer的静态方法valueOf(String s);


    示例1:
  1. public class WrapperDemo{
  2.        public static void main(String[] args){
  3.             //整型最大值
  4.             System.out.println(Integer.MAX_VALUE);
  5.             //十进制转换成二进制
  6.             System.out.println(Integer.toBinaryString(6));
  7.       }
  8. }
复制代码
    运行结果:


    示例2:
  1. public class WrapperDemo{
  2.        public static void main(String[] args){
  3.             Integer i = new Integer(5);
  4.             System. out.println(Integer.parseInt( "123") + 1);
  5.       }
  6. }
复制代码
    运行结果:

    示例3:
  1. public class WrapperDemo{
  2.        public static void main(String[] args){
  3.              if(Boolean.parseBoolean("true" ))
  4.                   System.out.println( "true");

  5.             Integer i = new Integer("123" );
  6.             System.out.println(i.intValue());
  7.       }
  8. }
复制代码
    运行结果:

    整数具备不同的进制体现。
    十进制-->其他进制方法:
    String toBinaryString(int i);
    String toOctalString(int i);
    String toHexString(int i);
    String toString(int i,int radix);


    示例4:
  1. public class WrapperDemo{
  2.        public static void main(String[] args){
  3.             System.out.println(Integer.toBinaryString(60));
  4.             System.out.println(Integer.toOctalString(60));
  5.             System.out.println(Integer.toHexString(60));
  6.             System.out.println(Integer.toString(60,4));
  7.       }
  8. }
复制代码
    运行结果:

    其他进制-->十进制方法:
    int parseInt(String s,int radix);


    示例5:
  1. public class WrapperDemo{
  2.        public static void main(String[] args){
  3.             System.out.println(Integer.parseInt("110",10));
  4.             System.out.println(Integer.parseInt( "3C",16));
  5.       }
  6. }
复制代码
   运行结果:

    需求:
    对一个字符串中的数值进行从小到大的排序。
   "20 78 9 -7 88 36 29"
    代码:

  1. import java.util.Arrays;

  2. public class WrapperTest{
  3.       
  4.       private static final String SPACE_SEPARATOR = " ";

  5.        public static void main(String[] args){
  6.             String numStr = "20 79 9 -7 88 36 29";
  7.             System.out.println(numStr);
  8.             numStr = sortStringNumber(numStr);
  9.             System.out.println(numStr);
  10.       }

  11.       public static String sortStringNumber(String numStr){
  12.              //1、将字符串变成字符串数组
  13.             String[] str_arr = stringToArray(numStr);

  14.              //2、将字符串数组变成int数组
  15.              int[] num_arr = toIntArray(str_arr);

  16.              //3、对int数组排序
  17.             mySortArray(num_arr);

  18.              //4、将排序后的int数组变成字符串
  19.             String temp = arrayToString(num_arr);

  20.             return temp;
  21.       }

  22.        public static String arrayToString(int[] num_arr){
  23.             StringBuilder sb = new StringBuilder();
  24.              for(int   x = 0; x < num_arr.length; x++){
  25.                    if(x!=num_arr.length - 1)
  26.                         sb.append(num_arr[x] + SPACE_SEPARATOR);
  27.                    else
  28.                         sb.append(num_arr[x]);
  29.              }
  30.              return sb.toString();
  31.       }

  32.        public static void mySortArray(int[] num_arr){
  33.             Arrays.sort(num_arr);
  34.       }
  35.       
  36.        public static int[] toIntArray(String[] str_arr){
  37.              int[] arr = new int[str_arr.length];

  38.              for(int i = 0; i < arr.length; i++){
  39.                   arr[i] = Integer.parseInt(str_arr[i]);
  40.              }

  41.              return arr;
  42.       }

  43.        public static String[] stringToArray(String numStr){
  44.             String[] str_arr = numStr.split(SPACE_SEPARATOR);
  45.             return str_arr;
  46.       }
  47. }
复制代码
   运行结果:


6.2 集合类

    集合类的由来:
    对象用于封装特有数据,对象多了需要存储;如果对象的个数不确定,就使用集合容器进行存储。

    集合特点:
    1. 用于存储对象的容器。
    2. 集合的长度是可变的。
    3. 集合中不可以存储基本数据类型值。

    集合容器因为内部的数据结构不同,有多种具体容器。
    不断的向上抽取,就形成了集合框架。

    P.S.

    数组和集合类同是容器,有何不同?
    数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。

    数组中可以存储基本数据类型,集合只能存储对象。

    集合框架的构成及分类:

  

    6.2.1 Collection接口

    框架的顶层Collection接口:

    Collection的常见方法:
    1、添加:
    boolean add(Object obj);
    boolean addAll(Collection coll);

    2、删除:
    boolean remove(Object obj);
    boolean removeAll(Collection coll);
    void clear();

    3、判断:
    boolean contains(Object obj);
    boolean containsAll(Collection coll);
    boolean isEmpty();判断集合中是否有元素。

    4、获取:
    int size();
    Iterator iterator();
    取出元素的方式:迭代器。
    该对象必须依赖于具体容器,因为每一个容器的数据结构都不同,所以该迭代器对象是在容器中进行内部实现的,也就是iterator方法在每个容器中的实现方式是不同的。
    对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。
    Iterator接口就是对所有的Collection容器进行元素取出的公共接口。

    5、其他:
    boolean retainAll(Collection coll);取交集
    Object toArray();将集合转成数组


    示例1:
  1. import java.util.*;

  2. public class CollectionDemo{
  3.       
  4.        public static void main(String[] args){
  5.             Collection coll = new ArrayList();
  6.             show(coll);

  7.             System.out.println( "---------------------------------" );

  8.             Collection c1 = new ArrayList();
  9.             Collection c2 = new ArrayList();
  10.             show(c1,c2);
  11.       }
  12.       
  13.        public static void show(Collection coll){
  14.              //1、添加元素,add
  15.             coll.add( "abc1");
  16.             coll.add( "abc2");
  17.             coll.add( "abc3");
  18.             System.out.println( "coll:" + coll);

  19.              //2、删除元素,remove
  20.             coll.remove( "abc2");//会改变集合的长度
  21.             System.out.println( "coll:" + coll);

  22.              //清空集合
  23.              //coll.clear();
  24.             System.out.println(coll.contains( "abc1"));
  25.       }

  26.        public static void show(Collection c1,Collection c2){
  27.              //给c1添加元素
  28.             c1.add( "abc1");
  29.             c1.add( "abc2");
  30.             c1.add( "abc3");
  31.             c1.add( "abc4");

  32.              //给c2添加元素
  33.             c2.add( "abc2");
  34.             c2.add( "abc6");
  35.             c2.add( "abc7");

  36.             System.out.println( "c1:" + c1);
  37.             System.out.println( "c2:" + c2);

  38.              //演示addAll
  39.              //将c2中的元素添加到c1中
  40.             c1.addAll(c2);

  41.              //演示removeAll
  42.              //从c1集合中删除与c2集合相同的元素
  43.              boolean b = c1.removeAll(c2);
  44.              System.out.println( "removeAll:" + b);

  45.              //演示containsAll
  46.              boolean b1 = c1.containsAll(c2);
  47.              System.out.println( "containsAll:" + b1);

  48.              //演示retainAll
  49.              //取交集,保留和指定的集合相同的元素
  50.              boolean b2 = c1.retainAll(c2);
  51.              System.out.println( "c1、c2交集:" + c1);
  52.       }
  53. }
复制代码
   运行结果:

    示例2:
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;

  4. public class IteratorDemo{
  5.        public static void main(String[] args){
  6.             Collection coll = new ArrayList();

  7.             coll.add( "abc1");
  8.             coll.add( "abc2");
  9.             coll.add( "abc3");
  10.             coll.add( "abc4");

  11.             System.out.println(coll);

  12.              //使用了Collection中的iterator()方法。调用集合中的迭代器方法,是为了获取集合中的迭代器对象。
  13.             Iterator it1 = coll.iterator();

  14.              while(it1.hasNext()){
  15.                   System.out.println(it1.next());
  16.             }

  17.              //for循环结束,Iterator变量内存释放,更高效
  18.              for(Iterator it2 = coll.iterator();it2.hasNext();){
  19.                   System.out.println(it2.next());
  20.             }
  21.       }
  22. }
复制代码
   运行结果:

    6.2.2 List、Set

    Collection
  
        |--List:有序(存入和取出的顺序一致),元素都有索引(角标),允许重复元素。

          |--Set:元素不能重复,无序。

    List:特有的常见方法。
    有一个共性特点就是都可以操作角标。
    1、添加
  
        void add(index,element);

          void addAll(index,collection);

    2、删除
  
        Object remove(index);


    3、修改
  
        Object set(index,element);


    4、获取:
   
       Object get(index);

          int indexOf(object);
          int lastIndexOf(object);
          List subList(from,to);

    List集合可以完成对元素的增删改查。


    示例1:
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class ListDemo{
  4.        public static void main(String[] args){
  5.             List list = new ArrayList();
  6.             show(list);
  7.       }

  8.        public static void show(List list){
  9.              //添加元素
  10.             list.add( "abc1" );
  11.             list.add( "abc2" );
  12.             list.add( "abc3" );

  13.             System.out.println(list);

  14.              //插入元素
  15.             list.add(1, "abc2" );

  16.              //删除元素
  17.             System.out.println( "remove:" + list.remove(2));

  18.              //修改元素
  19.             System.out.println( "set:" + list.set(1,"abc8" ));

  20.              //获取元素:
  21.             System.out.println( "get:" + list.get(0));
  22.            
  23.              //获取子列表
  24.             System.out.println( "sublist:" + list.subList(1,2));

  25.             System.out.println(list);
  26.       }
  27. }
复制代码
   运行结果:

    示例2:
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import java.util.ListIterator;

  5. public class ListDemo{
  6.        public static void main(String[] args){
  7.             List list = new ArrayList();
  8.             show(list);
  9.       }

  10.        public static void show(List list){
  11.             list.add( "abc1");
  12.             list.add( "abc2");
  13.             list.add( "abc3");
  14.             list.add( "abc4");
  15.             
  16.             Iterator it = list.iterator();
  17.              while(it.hasNext()){
  18.                   System.out.println( "next:" + it.next());
  19.             }

  20.              //list特有的取出元素的方式之一
  21.              for(int x = 0; x < list.size(); x++){
  22.                   System.out.println( "get:" + list.get(x));
  23.             }
  24.       }
  25. }
复制代码
    运行结果:

    示例3:  
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;

  4. public class ListDemo{
  5.        public static void main(String[] args){
  6.             List list = new ArrayList();

  7.             list.add( "abc1");
  8.             list.add( "abc2");
  9.             list.add( "abc3");

  10.             System.out.println( "list:" + list);

  11.             Iterator it = list.iterator();
  12.             
  13.              while(it.hasNext()){
  14.                   Object obj = it.next();

  15.                    if(obj.equals("abc2" )){
  16.                         list.add( "abc9");
  17.                   } else{
  18.                         System.out.println( "next:" + obj);
  19.                   }
  20.                   System.out.println(list);
  21.             }
  22.       }
  23. }
复制代码
   运行结果:

    在迭代器过程中,不要使用集合操作元素,容易出现异常:java.util.ConcurrentModificationException。
    可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。


    示例4:
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.ListIterator;

  4. public class ListDemo{
  5.        public static void main(String[] args){
  6.             List list = new ArrayList();

  7.             list.add( "abc1");
  8.             list.add( "abc2");
  9.             list.add( "abc3");

  10.             System.out.println( "list:" + list);

  11.             ListIterator it = list.listIterator(); //获取列表迭代器对象
  12.              //它可以实现在迭代过程中完成对元素的增删改查。
  13.              //注意:只有list集合具备该迭代功能。

  14.              while(it.hasNext()){
  15.                   Object obj = it.next();

  16.                    if(obj.equals("abc3" )){
  17.                         it.add( "abc9");
  18.                   }
  19.             }

  20.             System.out.println( "hasNext:" + it.hasNext());
  21.             System.out.println( "hasPrevious:" + it.hasPrevious());
  22.             
  23.              while(it.hasPrevious()){
  24.                   System.out.println( "previous:" + it.previous());
  25.             }
  26.             System.out.println( "list:" + list);
  27.       }
  28. }
复制代码
    运行结果:

~END~



~爱上海,爱黑马~


26 个回复

倒序浏览
谢谢阳哥,刚好可以用上
回复 使用道具 举报
真是比看书还方便
回复 使用道具 举报
刚刚看到这里,表示很有帮助,非常感谢
回复 使用道具 举报
谢谢分享~
回复 使用道具 举报
6.2.2中list特有的方法中有个小问题
是addAll(index, Collection);
你写成了add(index, Collection);
不知道我的判断正确吗?

点评

不错,看的很仔细。  发表于 2015-6-15 23:26
回复 使用道具 举报
看完今天的视频,预习明天的课程
回复 使用道具 举报
不错   值得收藏
回复 使用道具 举报

谢谢阳哥,刚好可以用上
回复 使用道具 举报
真是比看书还方便
回复 使用道具 举报

刚刚看到这里,表示很有帮助,非常感谢
回复 使用道具 举报

不错   值得收藏
回复 使用道具 举报
虽说好多都还没学到,不过以后还是有好大帮助的,非常感谢
回复 使用道具 举报
每日学习签到!!!
回复 使用道具 举报
学习了,谢谢老师
回复 使用道具 举报
不错   值得收藏
回复 使用道具 举报
不错 、顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
阳哥发的都是精华
回复 使用道具 举报
kime 中级黑马 2015-8-24 09:29:18
19#
学习了,very good
回复 使用道具 举报
又看完一节了,加油继续努力!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马