黑马程序员JAVA笔记6--集合

来源:互联网 发布:天猫双十一销售额数据 编辑:程序博客网 时间:2024/06/17 01:57

------- android培训java培训、期待与您交流! ----------

集合

一、常用对象

(1)String、StringBuffer和StringBuilder

    String类的特点:字符串对象一旦被初始化就不会被改变。

 

    String类部分方法
    1、获取
    获取字符串中字符的个数(长度)

    int length();
    根据位置获取字符
    char charAt(int index);

    根据字符获取在字符串中的位置
    int indexOf(int ch);

    indexO方法参数f类型为int是为了既可以支持字符,也可以支持字符在ASCII码中对应的数字。
    从指定位置开始查找ch第一次出现的位置。
    int indexOf(int ch,int fromIndex);
    int indexOf(String str);
    int indexOf(String str,int fromIndex);
    根据字符串获取在字符串中第一次出现的位置。
    int lastIndexOf(int ch);
    int lastIndexOf(int ch,int fromIndex);
    int lastIndexOf(String str);
    int lastIndexOf(String str,int fromIndex);      

    获取字符串中的一部分字符串,也叫子串。
    String substring(int beginIndex,int endIndex);
    String substring(int beginIndex);


     2、转换
    将字符串变成字符串数组(字符串的切割)
    String[] split(String regex);涉及到正则表达式。

    将字符串变成字符数组
    char[] toCharArray();
    将字符串变成字节数组

    char[] getBytes();

    将字符串中的字母转成大小写

    String toUpperCase();大写
    String toLowerCase();小写
    将字符串中的内容进行替换
    String replace(char oldCh,char newCh);
    String replace(String s1,String s2);

    去除字符串两端空格
    String trim();

    将字符串进行连接
    String concat(String str);



    3、判断
    两个字符串内容是否相同呢?
    boolean equals(Object obj);
    boolean equalsIgnoreCase(String str);忽略大小写比较字符串内容。

    字符串中是否包含指定字符串
    boolean contains(String str);

    字符串是否以指定字符串开头,是否以指定字符串结尾
    boolean startsWith(String str);
    boolean endsWith(String str);


    4、比较
    int compareTo(String str);    如果参数字符串等于此字符串,则返回值0;如果此字符串按字典顺序小于字符串参数,则返回一个小于0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于0的值。


    5、返回字符串对象的规范化表示形式
    String intern();
    当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。

    StringBuffer
    StringBuffer:就是字符串缓冲区,用于存储数据的容器。
    特点:
    1. 长度是可变的。
    2. 可以存储不同类型数据。
    3. 最终要转成字符串进行使用。

注释:
    StringBuffer的字符串缓冲区初始容量为16个字符,其实质还是数组。

    StringBuffer既然是一个容器对象,应该具备什么功能呢?
    1、添加

    StringBuffer append(data);
    StringBuffer insert(index,data);

 

    2、删除

    StringBuffer delete(int start,int end);包含头,不包含尾。
    StringBuffer deleteCharAt(int index):删除指定位置的元素。

 

    3、查找
    char charAt(int index);
    int indexO(String str);
    int lastIndexOf(String str);

    4、修改
    StringBuffer replace(int start,int end,String str);
    void setCharAt(int index,char ch);

    5、其他方法

    void setLength(int newLength);设置字符序列的长度

    public StringBuffer reverse();将字符序列用其反转形式取代

 

    StringBuilder


    jdk1.5以后出现了功能和StringBuffer一模一样的对象,就是StringBuilder。

    不同的是:
    StringBuffer是线程同步的,通常用于多线程。
    StringBuilder是线程不同步的,通常用于单线程,它的出现能够提高程序效率。
    故StringBuilder多用于多个线程是不安全的,如果需要这样的同步,则建议使用StringBuffer。

注释:
    JDK一般升级目的:
    1、简化书写。
    2、提高效率。
    3、增加安全性。

(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);

    十进制-->其他进制方法:
    String toBinaryString(int i);
    String toOctalString(int i);
    String toHexString(int i);
    String toString(int i,int radix);

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


二、集合类

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

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

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

注释:
    数组和集合类同是容器,有何不同?
    数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
    数组中可以存储基本数据类型,集合只能存储对象。

(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();将集合转成数组


(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集合可以完成对元素的增删改查。


(3)Vector、ArrayList、LinkedList
    List:
          |--Vector:内部是数组数据结构,是同步的。增删,查询都很慢。
          |--ArrayList:内部是数组数据结构,是不同步的,替代了Vector。替代了Vector,查询的速度快。
          |--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

    LinkedList方法:
    addFirst();
    addLast();

    jdk1.6版本后新方法:
    offerFirst();与addFirst方法没有区别。
    offerLast();与addLast方法没有区别。
    ---------------------------------------------------------
    getFirst();//获取但不移除,如果链表为空,抛出NoSuchElementException。
    getLast();

    jdk1.6版本后新方法:
    peekFirst();//获取但不移除,如果链表为空,返回null。
    peekLast();
    --------------------------------------------------------
    removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException。
    removeLast();

    jdk1.6版本后新方法:
    pollFirst();//获取并移除,如果链表为空,返回null;
    pollLast();

    哈希表确定元素是否相同
    1. 判断的是两个元素的哈希值是否相同。
        如果相同,再判断两个对象的内容是否相同。
    2. 判断哈希值相同,其实判断的是对象的HashCode方法。判断内容相同,用的是equals方法。
    
注释:
    如果哈希值不同,不需要判断equals。

TreeSet对元素进行排序的方式一:    让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法。

    如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
    可以使用TreeSet集合第二种排序方式:
    让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
    将该类对象作为参数传递给TreeSet集合的构造函数。


(4)Map、HashMap、TreeMap
    Map:一次添加一对元素,Collection一次添加一个元素。
    Map也称为双列集合,Collection集合称为单列集合。
    其实Map集合中存储的就是键值对。
    map集合中必须保证键的唯一性。

常用方法:
    1、添加
    value put(key,value):返回前一个和key关联的值,如果没有返回null。

    2、删除
    void clear():清空map集合。
    value remove(Object key):根据指定的key删除这个键值对。

    3、判断
    boolean containsKey(key);
    boolean containsValue(value);
    boolean isEmpty();

    4、获取
    value get(key):通过键获取值,如果没有该键返回null。
                            当然可以通过返回null,来判断是否包含指定键。
    int size():获取键值对个数。

    Map常用的子类:
          |--Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。
               |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
          |--HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。
          |--TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。

    hashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。

(5)Collections工具类
    Collections:是集合框架的工具类,里面的方法都是静态的。


(6)Arrays工具类  

    Arrays:集合框架的工具类,里面的方法都是静态的。
    重点:List asList(数组)将数组转成集合。

    好处:可以使用集合的方法操作数组。

注释:
    数组的长度是固定的,所以对于结合的增删方法是不可以使用的,否则,会发生UnsupportedOperationException。

 

    数组转集合,用asList方法。
    如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。
    如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。

 

    集合转数组
    使用的就是Collection接口中的toArray方法。
    集合转成数组,可以对集合中的元素操作的方法进行限定,不允许对其进行增删。

    toArray方法需要传入一个指定类型的数组。
    长度该如何定义呢?
    如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同的size的数组。
    如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。
    所以建议,最后长度就指定为,集合的size。


0 0
原创粉丝点击